`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 /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)

参考文献

関連情報