2016-05-08 7 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)を再帰的に処理しようとしている間、サブディレクトリを変更しています。したがって、1つの例外を除いて、次の厄介なコードが機能します。

@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を表示します

関連する問題