То, что я пытаюсь сделать через командную строку, это цикл файлов в каталоге и просто переименовать их на один больший последовательный номер. Я могу сделать это с помощью следующего
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)
Дальнейшее чтение
- Алфавитный указатель командной строки Windows CMD | SS64.com
- Команды Windows CMD (категоризированные) - Windows CMD - SS64.com
- CMD.exe (Командная оболочка) - Windows CMD - SS64.com- Запустите новую оболочку CMD и (опционально) запустите команду/исполняемую программу.