Подтвердить что ты не робот

Получить имя файла в пакетном режиме для цикла

У меня есть следующий цикл For в пакетном файле:

for /R c:\test\src %%i IN (*.*) DO (
MOVE %%i C:\test\destination
ECHO %%i
exit
)

Результат ECHO выводит весь путь к файлу Ex: C:\Foldername\Filename Мне нужно ECHO только Имя файла. Есть ли специальная команда, которая даст мне имя файла? Спасибо!

4b9b3361

Ответ 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 для явного включения расширений команд для сеанса