Как выполнить `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 )

но это тоже не сработало. Так что мой вопрос, есть ли способ обойти это. Согласно этому в эту веткуэтотthread Я должен иметь возможность использовать setlocal enabledelayedexpansionв строке cmd, но это не работает. Есть ли способ обойти это.

решение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)

Дальнейшее чтение

Связанный контент