2009-07-08 27 views
32

在批處理文件中,我有以下For循環:獲取文件名中的批次循環

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

回波的結果輸出整個文件路徑例如:C:\文件夾\文件名 我需要到ECHO只有文件名。是否有一個特定的命令,會給我的文件名? 謝謝!

+6

順便說一句,如果您使用的是版本做出的這個世紀的窗口,它不是您正在使用的DOS,它是Windows命令提示符。 – whatsisname 2009-07-08 21:12:59

回答

65

當啓用命令擴展(大致爲Windows XP和更新版本)時,可以使用語法%〜nF(其中F是變量,〜n是其名稱的請求)來僅獲取文件名。

FOR /R C:\Directory %F in (*.*) do echo %~nF 

應只回顯文件名。

+13

如果你想看到文件擴展名,最後加上%〜xF。 – akf 2009-07-08 21:20:44

+33

或%〜nxf獲取帶擴展名的文件名。 – Helen 2009-07-08 21:22:23

4

或者只是%〜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 
) 

或將它們存儲到變量(!N1 !,!N2!..!N!!)中以備後用。例如:

set /a N=0 
for /f "tokens=* delims= " %%a in (dir_file.txt) do (
set /a N+=1 
set v[!N!]=%%a 
) 
0

如果你想保持這兩個文件名(只)和擴展,你可以使用%~nxF

FOR /R C:\Directory %F in (*.*) do echo %~nxF