2013-09-26 2 views
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 

Так, например, это находит файлы .mp3, jpg, png, exe ниже Assign2 и распечатывает результаты поиска. Но он выводит их как этот G: \ Assign2 \ ла \ ла \ ла \ ла \ л \ Game.exeКак сократить путь к файловому пути в текстовые файлы в пакетных файлах

Я хотел бы, чтобы напечатать что-то вроде \ ли \ game.exe

Есть идеи? Я попытался использовать% ~ nI, но я не знаю, как его использовать, и я новичок в пакетной работе.

+0

Вы хотите относительные пути? – npocmaka

+0

Или вы хотите использовать '%% ~ nG' в своих циклах? – npocmaka

+0

Ваш образец вывода, начинающийся с «C: \ USers \ ...», не соответствует месту вашего сценария, начиная с «G: \ Assign2 \ ...» – dbenham

ответ

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

это будет работать для вас с некоторыми небольшими изменениями:

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

+1, очень приятно. Но я думаю, что OP ошибается в желании лидера \, поскольку это подразумевает абсолютную папку, начиная с корня. – dbenham

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. (другими словами, относительный путь)

+0

Код Endoro не печатает одно статическое имя файла, а blah - в качестве родительской папки. Это нигде не «точно», что он просил предоставить данный код. Эндоро, должно быть, был очень занят. Я думаю, вы правы, хотя, возможно, человек тоже хочет получить дополнительную информацию о пути. – foxidrive