@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,但我不知道如何使用它并且是批处理新手。
答案 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
的起始位置。 (换句话说,相对路径)