質問: 名前に基づいてファイルをフォルダに移動します 移動する必要のある.pdfファイルと.jpgファイルがいくつかあります。彼らはこのような名前が付けられています002-054*.pdf 042-021*.pdf *いくつかの接辞です。今、私はこれらのファイルをこのようなフォルダに移動したいと思います002\002 - 054\002-054*.pdf 042\042 - 021\042-021*.pdf いくつかのフォルダはすでに存在しますが、この命名スキームでは002\002 - 054 some name\2番目のコードスニペットに記載されているフォルダーがまだ存在しない場合にのみ、フォルダーを作成したいと思います。それらがすでに存在する場合は、ファイルを対応するフォルダーに移動したいだけです。グーグルで何かをまとめることができました@echo off for %%f in (*.pdf *.jpg) do call :subr "%%f" exit /b :subr set filename=%1 move %1 %filename:~1,3%\%filename:~1,7%\ exit /b しかしこれはすでに存在するフォルダを考慮しません。それを達成するための最良の方法は何でしょうか?
回答: フォルダを現在のディレクトリに作成する必要がある場合 および第2レベルのフォルダーの番号の間に-があります:@echo off for /f "delims=" %%f in ( 'dir /b *.pdf *.jpg^|findstr "^[0-9][0-9][0-9]-[0-9][0-9][0-9]" ' ) do call :subr "%%f" exit /b :subr set "file=%~n1" set "fold=%file:~0,3%\%file:~0,3% - %file:~4,3%\" if not exist "%fold%" md "%fold%" move %1 "%fold%" およびdir |findstrの変更は、番号パターン999-999で始まるファイルのみが処理されるようにするためのものです。 mdは中間フォルダーを作成するため、必要なmdは1つだけです。