2016-05-08 3 views
2

Вот что я пробовал:набор имя_папки = имя_папки:! = Пакетные переименовать все папки, содержащие файлы, имеющие определенный шаблон

@echo off 
REM Prefix zz_ to folders containing episodes with zz_ 
setlocal enabledelayedexpansion enableextensions 
for /r "G:\itunes\Podcasts\" %%f in (zz_*.mp3) do (
    set N=%%~pf~ 
    set N=!N:\itunes\Podcasts\=! 
    set N=!N:\=! 
if exist %%f ren "g:%%~pf" "zz_!N!" 
) 
pause 

Но я получил сообщение об ошибке: Процесс не может получить доступ к файлу, так как используется другим процессом. Я не программист каким-либо образом, просто вырезать & вставить своего рода парня, поэтому благодарим за любую помощь.

Итак, что случилось с вышеизложенным, я, конечно, изменяю подкаталоги при попытке перезагрузить каталог (g: \ itunes \ podcasts). Таким образом, следующий неуклюжий код работает, за одним исключением.

@echo off 
setlocal enabledelayedexpansion enableextensions 
REM Prefix zz_ to folders containing episodes with zz_ 
for /r "G:\itunes\Podcasts\" %%f in (zz_*.mp3) do (
    set foldername=%%~pf 
    set foldername=!foldername:~17! 
    set foldername=!foldername:\=! 
    if exist %%f echo if exist %%f ren "g:%%~pf" "zz_!foldername!" >>g:\trash.bat 
) 
call g:\trash.bat 
del g:\trash.bat 

pause 

Он не обрабатывает имена файлов, содержащие восклицательные знаки. Есть предположения?

+0

Используются ли файлы .mp3? Потому что это то, что предлагает это сообщение об ошибке. – SomethingDark

+2

Отключите «echo off» и посмотрите на причудливый материал, который вы делаете. –

ответ

0

Следующие работы, но очень неуклюжие ... с одной стороны, он продолжает поиск папки даже после обнаружения 1-го zz_podcast. И идея выполнения командного файла в пакетном файле может в конечном итоге вызвать у меня другие проблемы с символами, которые необходимо экранировать. Для 2-й партии мне нужно было внести изменения в процентные знаки, которые вы видите ниже. Было бы хорошо, если бы кто-то мог подумать о совершенно другом подходе, возможно, еще более элегантном?

@echo off 
REM Prefix zz_ to folders containing episodes with zz_ 
setlocal DisableDelayedExpansion 
REM The following recurses g:\itunes\podcasts looking for zz_ podcasts 
for /r "G:\itunes\Podcasts\" %%f in (zz_*.mp3) DO (
set "filename=%%f" 
set "filepath=%%~pf" 
set "foldername=%%~pf" 
REM Delayed Expansion needed here for edits to file, path & folder names 
setlocal EnableDelayedExpansion 
set filename2=!filename:%%=%%%%! 
set filepath=!filepath:%%=%%%%! 
set foldername=!foldername:~17! 
set foldername=!foldername:\=! 
set foldername=!foldername:%%=%%%%! 
if exist "!filename!" echo if exist "!filename2!" ren "g:!filepath!" "zz_!foldername!" >>g:\trash.bat 
endlocal 
) 
REM trash.bat has its own issues with escaped characters 
call g:\trash.bat 
del g:\trash.bat 

Что это было? Когда я редактирую теги подкастов, мне часто нужно видеть неотредактированный подкаст «в контексте», чтобы решить лучший путь вперед. Например, если подкаст имеет «ретрансляцию» в своем названии, тогда мне нужно убедиться, что у меня есть оригинал перед его удалением. Поэтому я временно помещаю подкасты как zz_, а затем открываю всю папку zz_, чтобы увидеть zz_episode «в контексте»