コマンドラインで実行しようとしているのは、ディレクトリ内のファイルをループし、連番に名前を変更することです。これは次のように実行できます。
set/a fileNum = 1 & for %f in (*.txt) do ( rename %~nf%~xf !fileNum!%~xf & set/a fileNum += 1 )
しかし問題は、cmd /V:ON
最初にコマンドラインで実行しないと変数の展開ができないことです。私は次のように試しました
cmd /V:ON & set/a fileNum = 1 & for %f in (*.txt) do ( rename %~nf%~xf !fileNum!%~xf & set/a fileNum += 1 )
しかし、それもうまくいきませんでした。そこで私の質問は、これを回避する方法はあるかということです。このスレッドによるとこれスレッドは cmd ラインで使用できるはずですsetlocal enabledelayedexpansion
が、動作しません。これを回避する方法はありますか。
答え1
本当にコマンドプロンプトで直接ワンライナーとして実行したい場合、または実行する必要がある場合は、次のようにします。
@>nul set filenum=1&@for %f in (*.txt) do @(cmd /v:on /c ECHO ren "%~nxf" "!fileNum!%~xf"&>nul set/a fileNum+=1)
ECHO
期待どおりに動作することを確認したらセーブガードを削除します
答え2
cmd /V:ON on
最初にコマンドラインを実行せずに変数の展開を行うことはできません。
正解です。ただし、次の方法は機能するはずです。
cmd /V:ON /c "set/a fileNum = 1 & for %f in (*.txt) do ( rename %~nf%~xf !fileNum!%~xf & set/a fileNum += 1)
参考文献
- Windows CMD コマンド ラインの AZ インデックス | SS64.com
- Windows CMD コマンド (分類済み) - Windows CMD - SS64.com
- CMD.exe (コマンド シェル) - Windows CMD - SS64.com- 新しい CMD シェルを起動し、(オプションで) コマンド/実行可能プログラムを実行します。