如何将文件路径输出缩短为批处理文件中的文本文件

时间:2013-09-26 19:09:12

标签: batch-file for-loop cmd dir

@echo off
REM - Check to see if there are any non-school related files on the system (mp3, jpg, png, exe)
REM - And print them out #bigbrother1984

cd G:\Assign2\

FOR /F "tokens=*" %%G IN ('dir /s /b "G:\Assign2\*.mp3"') DO echo %%G >> Found_MusicFiles.txt

FOR /F "tokens=*" %%G IN ('dir /s /b "G:\Assign2\*.JPG"') DO echo %%G >> Found_ImageFiles.txt

FOR /F "tokens=*" %%G IN ('dir /s /b "G:\Assign2\*.PNG"') DO echo %%G >> Found_ImageFiles.txt

 FOR /F "tokens=*" %%G IN ('dir /s /b "G:\Assign2\*.exe"') DO echo %%G >>  Found_GamesFiles.txt

因此,例如,它在Assign2下面找到.mp3,jpg,png,exe文件,并打印出它找到的结果。 但它会像这样打印出来 G:\的Assign2 \等等\等等\等等\等等\等等\的Game.exe

我希望打印出类似\ blah \ game.exe

的内容

有什么想法吗?我尝试使用%~nI,但我不知道如何使用它并且是批处理新手。

3 个答案:

答案 0 :(得分:2)

这应该做你需要的:

@echo off
REM - Check to see if there are any non-school related files on the system (mp3, jpg, png, exe)
REM - And print them out #bigbrother1984

pushd "G:\Assign2\"

FOR /F "delims=" %%a IN ('dir /s /b /a-d *.mp3 *.jpg *.png *.exe ') DO (
for %%b in ("%%~pa.") do >>"%userprofile%\desktop\Found_MusicFiles.txt" echo %%~nxb\%%~nxa
)
popd

答案 1 :(得分:1)

通过一些小的改动,这对你有用:

FOR %%a IN ("C:\USers\blah\blah\blah\blah\blah\Game.exe") do for %%b in ("%%~pa.") do echo \%%~nxb\%%~nxa

答案 2 :(得分:1)

Endoro提供了一个答案,可以准确地告诉您所要求的内容。但我怀疑这可能不是你想要的。您只要求路径中的最后一个文件夹,但这可能不足以说明它来自何处。

我怀疑你想要从当前目录开始的相对路径。

FORFILES命令直接提供相对路径:

cd G:\Assign2
forfiles /s /m *.mp3 /c "cmd /c echo @relpath"
etc.

或者不需要CD

forfiles /s /p "G:\Assign2" /m *.mp3 /c "cmd /c echo @relpath"
etc.

输出看起来像".\blah\blah\file.mp3",其中.代表G:\Assign2的起始位置。 (换句话说,相对路径)