Как получить первый файл в подпапке при повторном просмотре через подпапки с помощью пакета Windows - PullRequest
1 голос
/ 04 сентября 2011

Я сейчас пытаюсь сделать создание файлов восстановления par2 немного проще для себя.Следующий скрипт просматривает все подпапки текущей папки и затем создает файлы восстановления par2 для всех файлов в указанной подпапке.

FOR /R %%g IN (.) DO C:\WINDOWS\par2.exe c -r10 -s384000 "%%g\%%~ng.par2" "%%g\*"
del /q *.par2
pause

Но теперь у меня есть одна проблема, он использует имя папки в качестве имени файла дляPar2 файлы, но удаляет «расширение», как это было бы для файла.Имена папок выглядят как «ConcertFootage1.avi_».Эта папка будет содержать файлы, такие как ConcertFootage1.avi.part01.rar и ConcertFootage1.avi.part02.rar и так далее.Это означает, что я получаю файлы par2, такие как «ConcertFootage1.par2», где это должно быть «ConcertFootage1.avi.par2», чтобы правильно сопоставлять файлы в папке.

Теперь, даже если это будет не убрать «расширение» из названия, которое я все равно получу в виде «ConcertFootage1.avi_.par2», поэтому я подумал, что было бы лучше просто получить имя файла в папке и использовать его в качестве основыэто означает, что это просто лишит расширение файла ".partX.rar", и это именно то, что мне нужно.

Я не могу понять, как это сделать в команде "FOR DO", хотя, могукто-нибудь поможет?

1 Ответ

2 голосов
/ 05 сентября 2011

Я понимаю ваш вопрос, что вы пытаетесь удалить два расширения из имени файла.

Вы можете сделать это с двумя %~nX флагами.

setlocal EnableDelayedExpansion
for /R %%g IN (.) DO (
  set "filename=%%~g"
  call :removeExtension result1 "!filename!"
  call :removeExtension result2 "!result1!"
  echo !filename! -- !result1! -- !result2!
)
exit /b

:removeExtension
set "%~1=%~n2"
exit /b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...