DOS バッチ ファイルの変数置換メカニズム、特に for ループの変数置換メカニズムについて理解できません。
単純化されたバッチの問題: 次のディレクトリを想像してください
01foo.txt
02foo.dir (これはディレクトリです)
bar01 (これはディレクトリです)
bar02 (これはディレクトリです)
このディレクトリ内の「bar」で始まらないすべてのファイル/ディレクトリを、bar+_the_first_2_characters_of_the_filename_or_directory_name のサブディレクトリに移動したいと考えています。
この場合、01foo.txt は bar01 に移動され、02foo.dir は bar02 に移動されます。
次のスクリプトは私の最初の試みです。
setlocal EnableDelayedExpansion
for %%A in (*) do (
set _x=%%A
if (!_x:~0,2! NEQ "bar") move %%A bar!_x:~0,2!
)
endlocal
これはファイルに対してのみループするように見えるという事実を除けば、まったく機能しません:-)。if ステートメントで「3! は現時点では予想外でした」というエラーが表示されます。
状況/スクリプトを改善する方法について何か考えはありますか?
ありがとう