【.cmd】 バッチファイルスクリプト %15 【.bat】 (761レス)
1-

1
(1): デフォルトの名無しさん [sage] 2022/09/14(水) 20:04:01.36 ID:XL8H98jz(1) AAS
拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる
質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです

※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう

過去スレ
%14 2chスレ:tech
%13 2chスレ:tech
%12 2chスレ:tech
%11 2chスレ:tech
%10 2chスレ:tech
%9 2chスレ:tech
%8 2chスレ:tech
%7 2chスレ:tech
%6 2chスレ:tech
%5 2chスレ:tech
%4 2chスレ:tech
%3 2chスレ:tech
%2 2chスレ:tech
【.cmd】 バッチファイルスクリプト %1 【.bat】
2chスレ:tech
バッチファイルプログラミング 3.bat
2chスレ:tech
バッチファイルプログラミング 2.bat
2chスレ:tech
バッチファイルプログラミング質問スレ
2chスレ:tech
2
(1): デフォルトの名無しさん [] 2022/09/16(金) 00:28:41.18 ID:9kvq1ahn(1/3) AAS
助けてください。
変数HOGEをキー入力してsplit()的な区切り文字列で分割する挙動を取りたいのですが
なぜかファイルが見つかりませんとなります。
リテラルでSET HOGE=1,2,3と記述していれば希望の動作となります。
半日困って今日は会社にお泊りです。誰か教えてください。

REM キー入力でHOGEに"1,2,3"と入力する
SET /P HOGE=

FOR /f "tokens=1,2 delims=," %%a in (%HOGE%) do (
ECHO %%a %%b %%c
)

OUTPUT ファイル 0_0 がみつかりません。
3
(1): デフォルトの名無しさん [] 2022/09/16(金) 00:29:57.20 ID:9kvq1ahn(2/3) AAS
FOR /f "tokens=1,2,3 delims=," %%a in (%HOGE%) do (
ECHO %%a %%b %%c
)
の間違いでした。だれか助けて〜
4
(1): デフォルトの名無しさん [sage] 2022/09/16(金) 00:32:46.68 ID:/mniU0r8(1) AAS
for /?

for /f
(ファイル)
("文字列")
('コマンド')
5
(1): デフォルトの名無しさん [] 2022/09/16(金) 00:42:16.15 ID:9kvq1ahn(3/3) AAS
>>4
ありがとうございます!
神!
6: デフォルトの名無しさん [] 2022/09/25(日) 20:41:32.40 ID:0LVDTkG9(1) AAS
set /a hoge1=%random%
set /a hoge2=%random%
set /a hoge3=%hoge1%+%hoge2%

echo %hoge3%

hoge3のところには単に「+」と表示され、
echoのところにはなにも表示されず、
その次に「オペラントがありません」と表示されます。

これはなにが起こっているのでしょうか…
7
(1): デフォルトの名無しさん [sage] 2022/09/26(月) 00:15:07.76 ID:7oxCYWvG(1/2) AAS
if とか for のブロックの中?
外部リンク:otnx.jp
8: デフォルトの名無しさん [] 2022/09/26(月) 00:46:39.21 ID:ou4YDIZU(1/3) AAS
>>7
御明察です!理由が分かって安心しました。ありがとうございます。

forループの中で、このような処理を書くことはできないのでしょうか。毎回ランダムで少し変えて実行する、という処理を書きたいのですが…
9
(1): デフォルトの名無しさん [sage] 2022/09/26(月) 01:01:52.99 ID:3mhNpNjH(1/2) AAS
for文の展開で解釈が一回多く入るから1回目の解釈後も環境変数として残すようにする
%%hoge%% → %hoge% → 環境変数hogeの中身に置換

上の方法はトリッキーなので正規には遅延環境変数展開を使う(setlocal /?)
setlocal EnableDelayedExpansion
10
(1): デフォルトの名無しさん [] 2022/09/26(月) 01:47:37.41 ID:ou4YDIZU(2/3) AAS
>>9
ありがとうございます!できました!

setlocal enabledelayedexpansion
forループの初め

set /a hoge1=%random%
set /a hoge2=%random%
set /a hoge3=!hoge1!+!hoge2!

echo !hoge3!
forループの終わり

という風にしたら、動きました。
デフォルトではforループ全体が一気に読み込まれるので、変数への代入が実行される前に変数の内容が確定してしまうという仕様なんですね。それを回避するために、!を付けて展開遅延変数を用いる、ということですね。

ただ、ランダムにしたはずなのに、毎回同じ値が表示されますね…
何故…
11
(1): デフォルトの名無しさん [sage] 2022/09/26(月) 01:54:43.87 ID:yGyQXERn(1) AAS
%random%
じゃなくて
!random!
12: デフォルトの名無しさん [sage] 2022/09/26(月) 05:19:01.77 ID:L5dyrqoL(1/2) AAS
そういえば、181系って、完全に揃った編成ってあったんだろうか?
台車違いの編入車や、485系仕様の編入車・新製車とかで、
いつも凸凹でちぐはぐだったイメージしかない

もし、153系の前面が165系の塗りになったら
足回りとか見慣れた目にはやっぱり違和感あるんだろうなぁ
クハ164は塗装変更しないで正解だったと思うわ
13: デフォルトの名無しさん [sage] 2022/09/26(月) 05:19:38.74 ID:L5dyrqoL(2/2) AAS
誤爆失礼!
14
(1): デフォルトの名無しさん [sage] 2022/09/26(月) 11:49:53.74 ID:7oxCYWvG(2/2) AAS
>>10
set /a hoge1=!random!, hoge2=!random!, hoge3=hoge1+hoge2

set /a は , 区切りで複数の式を指定可
環境変数は展開せずとも計算可能。その場合存在しない変数名は0として扱われ、展開した場合(多くはエラーになる)とは違ってくるので意図した計算になっていない事に気付き難い事に注意が必要
random などの特殊環境変数は環境変数としては存在せず、展開時に代入されるので展開が必要

setlocal enabledelayedexpansion
for /L %%i in (1,1,4) do (
set /a a=!random!, b=!random!, c=a+b
echo !c!
)
pause

こんな風にも書ける
set /a c=(a=!random!)+(b=!random!)
echo !a! + !b! = !c!

「遅延環境変数」という名称はそういう変数が別にあるのかと紛らわしくて良く無いと思うわ
環境変数
特殊変数
標準展開、事前展開、%展開 (展開されてから構文解析)
遅延展開、!展開 (構文解析されてからコマンド実行直前に展開)
用いるなら「環境変数の遅延展開」だろう
1-
あと 747 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.026s