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

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\blah\blah\blah\blah\blah\Game.exe

\blah\game.exe のようなものを出力したい

何か案は?%~nI を使ってみたのですが、使い方がわからずバッチ初心者です。

4

3 に答える 3

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
于 2013-09-27T08:58:53.703 に答える
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。(つまり、相対パス)

于 2013-09-27T11:53:21.017 に答える