Получить имя файла в пакетном режиме для цикла
У меня есть следующий цикл For в пакетном файле:
for /R c:\test\src %%i IN (*.*) DO (
MOVE %%i C:\test\destination
ECHO %%i
exit
)
Результат ECHO выводит весь путь к файлу Ex: C:\Foldername\Filename
Мне нужно ECHO только Имя файла. Есть ли специальная команда, которая даст мне имя файла?
Спасибо!
Ответы
Ответ 1
Когда расширенные расширения команд (Windows XP и новее, грубо), вы можете использовать синтаксис% ~ nF (где F - это переменная, а ~ n - это запрос для его имени), чтобы получить только имя файла.
FOR /R C:\Directory %F in (*.*) do echo %~nF
должен отображать только имена файлов.
Ответ 2
или Just% ~ F даст вам полный путь и полное имя файла.
Например, если вы хотите зарегистрировать все *.ax файлы в текущем каталоге....
FOR /R C:. %F in (*.ax) do regsvr32 "%~F"
Это отлично работает в Win7 (64 бит): -)
Ответ 3
Я немного опоздал, но я использовал это:
dir /B *.* > dir_file.txt
тогда вы можете сделать простой цикл FOR, чтобы извлечь имя файла и использовать его. например:
for /f "tokens=* delims= " %%a in (dir_file.txt) do (
gawk -f awk_script_file.awk %%a
)
или сохраните их в Vars (! N1!, N2!..! Nn!) для последующего использования. например:
set /a N=0
for /f "tokens=* delims= " %%a in (dir_file.txt) do (
set /a N+=1
set v[!N!]=%%a
)
Ответ 4
Если вы хотите сохранить оба имени файла (только) и расширение, вы можете использовать %~nxF
:
FOR /R C:\Directory %F in (*.*) do echo %~nxF
Ответ 5
Я использую Window 7, и все эти примеры выше с подобной командой не работают.
FOR /R C:\files %F in (*.*) do echo %~nxF
Приведенная выше команда выведет:
D:\11_PersonalTOOLS\DOS>list_file.bat
~nxF was unexpected at this time.
Это даже после выполнения команды cmd\x для явного включения расширений команд для сеанса