拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる
質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです
※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう
過去スレ
%14 https://mevius.5ch.net/test/read.cgi/tech/1597442426/
%13 https://mevius.2ch.net/test/read.cgi/tech/1542779527/
%12 https://mevius.2ch.net/test/read.cgi/tech/1489207631/
%11 https://echo.2ch.net/test/read.cgi/tech/1424858999/
%10 https://peace.2ch.net/test/read.cgi/tech/1374205515/
%9 https://toro.2ch.net/test/read.cgi/tech/1335015478/
%8 https://toro.2ch.net/test/read.cgi/tech/1315844420/
%7 https://hibari.2ch.net/test/read.cgi/tech/1298873550/
%6 https://hibari.2ch.net/test/read.cgi/tech/1277465356/
%5 https://pc12.2ch.net/test/read.cgi/tech/1242268171/
%4 https://pc12.2ch.net/test/read.cgi/tech/1229955189/
%3 https://pc11.2ch.net/test/read.cgi/tech/1217860043/
%2 https://pc11.2ch.net/test/read.cgi/tech/1197881068/
【.cmd】 バッチファイルスクリプト %1 【.bat】
https://pc11.2ch.net/test/read.cgi/tech/1178281991/
バッチファイルプログラミング 3.bat
https://pc11.2ch.net/test/read.cgi/tech/1148485555/
バッチファイルプログラミング 2.bat
https://pc8.2ch.net/test/read.cgi/tech/1104911889/
バッチファイルプログラミング質問スレ
https://pc5.2ch.net/test/read.cgi/tech/1040614686/
探検
【.cmd】 バッチファイルスクリプト %15 【.bat】
2022/09/14(水) 20:04:01.36ID:XL8H98jz
2デフォルトの名無しさん
2022/09/16(金) 00:28:41.18ID:9kvq1ahn 助けてください。
変数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 がみつかりません。
変数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デフォルトの名無しさん
2022/09/16(金) 00:29:57.20ID:9kvq1ahn FOR /f "tokens=1,2,3 delims=," %%a in (%HOGE%) do (
ECHO %%a %%b %%c
)
の間違いでした。だれか助けて〜
ECHO %%a %%b %%c
)
の間違いでした。だれか助けて〜
2022/09/16(金) 00:32:46.68ID:/mniU0r8
for /?
for /f
(ファイル)
("文字列")
('コマンド')
for /f
(ファイル)
("文字列")
('コマンド')
5デフォルトの名無しさん
2022/09/16(金) 00:42:16.15ID:9kvq1ahn6デフォルトの名無しさん
2022/09/25(日) 20:41:32.40ID:0LVDTkG9 set /a hoge1=%random%
set /a hoge2=%random%
set /a hoge3=%hoge1%+%hoge2%
echo %hoge3%
hoge3のところには単に「+」と表示され、
echoのところにはなにも表示されず、
その次に「オペラントがありません」と表示されます。
これはなにが起こっているのでしょうか…
set /a hoge2=%random%
set /a hoge3=%hoge1%+%hoge2%
echo %hoge3%
hoge3のところには単に「+」と表示され、
echoのところにはなにも表示されず、
その次に「オペラントがありません」と表示されます。
これはなにが起こっているのでしょうか…
2022/09/26(月) 00:15:07.76ID:7oxCYWvG
if とか for のブロックの中?
https://otnx.jp/CMD/?%C1%B4%C8%CC/%B9%BD%CA%B8%B2%F2%C0%CF
https://otnx.jp/CMD/?%C1%B4%C8%CC/%B9%BD%CA%B8%B2%F2%C0%CF
8デフォルトの名無しさん
2022/09/26(月) 00:46:39.21ID:ou4YDIZU >>7
御明察です!理由が分かって安心しました。ありがとうございます。
forループの中で、このような処理を書くことはできないのでしょうか。毎回ランダムで少し変えて実行する、という処理を書きたいのですが…
御明察です!理由が分かって安心しました。ありがとうございます。
forループの中で、このような処理を書くことはできないのでしょうか。毎回ランダムで少し変えて実行する、という処理を書きたいのですが…
2022/09/26(月) 01:01:52.99ID:3mhNpNjH
for文の展開で解釈が一回多く入るから1回目の解釈後も環境変数として残すようにする
%%hoge%% → %hoge% → 環境変数hogeの中身に置換
上の方法はトリッキーなので正規には遅延環境変数展開を使う(setlocal /?)
setlocal EnableDelayedExpansion
%%hoge%% → %hoge% → 環境変数hogeの中身に置換
上の方法はトリッキーなので正規には遅延環境変数展開を使う(setlocal /?)
setlocal EnableDelayedExpansion
10デフォルトの名無しさん
2022/09/26(月) 01:47:37.41ID:ou4YDIZU >>9
ありがとうございます!できました!
setlocal enabledelayedexpansion
forループの初め
set /a hoge1=%random%
set /a hoge2=%random%
set /a hoge3=!hoge1!+!hoge2!
echo !hoge3!
forループの終わり
という風にしたら、動きました。
デフォルトではforループ全体が一気に読み込まれるので、変数への代入が実行される前に変数の内容が確定してしまうという仕様なんですね。それを回避するために、!を付けて展開遅延変数を用いる、ということですね。
ただ、ランダムにしたはずなのに、毎回同じ値が表示されますね…
何故…
ありがとうございます!できました!
setlocal enabledelayedexpansion
forループの初め
set /a hoge1=%random%
set /a hoge2=%random%
set /a hoge3=!hoge1!+!hoge2!
echo !hoge3!
forループの終わり
という風にしたら、動きました。
デフォルトではforループ全体が一気に読み込まれるので、変数への代入が実行される前に変数の内容が確定してしまうという仕様なんですね。それを回避するために、!を付けて展開遅延変数を用いる、ということですね。
ただ、ランダムにしたはずなのに、毎回同じ値が表示されますね…
何故…
2022/09/26(月) 01:54:43.87ID:yGyQXERn
%random%
じゃなくて
!random!
じゃなくて
!random!
2022/09/26(月) 05:19:01.77ID:L5dyrqoL
そういえば、181系って、完全に揃った編成ってあったんだろうか?
台車違いの編入車や、485系仕様の編入車・新製車とかで、
いつも凸凹でちぐはぐだったイメージしかない
もし、153系の前面が165系の塗りになったら
足回りとか見慣れた目にはやっぱり違和感あるんだろうなぁ
クハ164は塗装変更しないで正解だったと思うわ
台車違いの編入車や、485系仕様の編入車・新製車とかで、
いつも凸凹でちぐはぐだったイメージしかない
もし、153系の前面が165系の塗りになったら
足回りとか見慣れた目にはやっぱり違和感あるんだろうなぁ
クハ164は塗装変更しないで正解だったと思うわ
2022/09/26(月) 05:19:38.74ID:L5dyrqoL
誤爆失礼!
2022/09/26(月) 11:49:53.74ID:7oxCYWvG
>>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!
「遅延環境変数」という名称はそういう変数が別にあるのかと紛らわしくて良く無いと思うわ
環境変数
特殊変数
標準展開、事前展開、%展開 (展開されてから構文解析)
遅延展開、!展開 (構文解析されてからコマンド実行直前に展開)
用いるなら「環境変数の遅延展開」だろう
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!
「遅延環境変数」という名称はそういう変数が別にあるのかと紛らわしくて良く無いと思うわ
環境変数
特殊変数
標準展開、事前展開、%展開 (展開されてから構文解析)
遅延展開、!展開 (構文解析されてからコマンド実行直前に展開)
用いるなら「環境変数の遅延展開」だろう
2022/09/26(月) 12:58:23.71ID:3mhNpNjH
英語だと
delayed expansion
delayed variable expansion
説明文的には
Enables the delayed environment variable expansion
Setting EnabledDelayedExpansion will cause each variable to be expanded at execution time rather than at parse time
delayed expansion
delayed variable expansion
説明文的には
Enables the delayed environment variable expansion
Setting EnabledDelayedExpansion will cause each variable to be expanded at execution time rather than at parse time
レスを投稿する
ニュース
- 今年の漢字 [ぐれ★]
- ミス・ユニバース フィンランド代表の「つり目」写真が波紋… 本人釈明も批判やまず 協会謝罪「徹底的に検証」へ★3 [冬月記者★]
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★4 [蚤の市★]
- 「偽サッチャー」「自滅的」「時代遅れ」 高市首相の経済政策を海外メディアが酷評 ★4 [蚤の市★]
- 【おこめ券】物価高対策の“おこめ券”全米販は1枚477円で販売へ 鈴木農水大臣「国民の皆様に活用いただきやすいよう工夫いただいた」 [ぐれ★]
- 【速報】衆院議員定数削減法案、自民・維新が今国会成立見送りで調整 [Hitzeschleier★]
- 【速報】今年の漢字、「熊」!wwwwwwwwwwwwwwwwwwwwwwwww [279254606]
- 過労死の遺族、高市に抗議したため冗談抜きでボロクソに叩かれる [637618824]
- 企業の4割以上「円安は経営にマイナス」、望ましい為替レート1ドル=133.5円 [256556981]
- 【悲報】ネトウヨ、BYDがトヨタホンダと業務提携してるせいでもう国内車に乗れなくなってしまう [709039863]
- 【速報】今年のゲームオブザイヤー、Clair Obscur: Expedition 33 [779938112]
- 【悲報】ホテル「高市早苗のせいで12月の売り上げがゼロになった😢」 [616817505]
