1

ファイル名を受け取り、ファイル名に基づいてフォルダーを作成し、ファイルをそのフォルダーに移動する、オンラインで見つけたこのバッチスクリプトがあります。

for %%f in (*) do @(md "%%~nf"&move "%%f" "%%~nf")>nul 2>&1&1

同様のファイルを取得して同じフォルダーに移動したいのですが、複数のファイルはすべて末尾に 001 002 003 などがあるので、末尾の数字以外のすべてに基づいて並べ替えて移動したいだけです。私はいくつかの掘り下げを行いましたが、そのスクリプトで %%var:~start,end%% を使用する必要があると思いますが、構成方法が 100% 確実ではありません。

私が持っている場合:

render001.png
render002.png
render003.png

txt001.png
txt002.png
txt003.png

ファイルがそこに移動された「render」と「txt」という名前の2つのフォルダーが必要です

どんな助けでも素晴らしいでしょう。

4

1 に答える 1

1

これが私の提案です:

@Echo Off
:: List all files and call :move_2_subfolder -function one file at a time. 
FOR %%a IN (*.png) DO Call :move_2_subfolder "%%~a"
GoTo :End

:move_2_subfolder
:: Save the name of the file [without extension] to sub_folder_name -variable.
Set sub_folder_name=%~n1
:: Strip the numbers off. 
Set sub_folder_name=%sub_folder_name:0=%
Set sub_folder_name=%sub_folder_name:1=%
Set sub_folder_name=%sub_folder_name:2=%
Set sub_folder_name=%sub_folder_name:3=%
Set sub_folder_name=%sub_folder_name:4=%
Set sub_folder_name=%sub_folder_name:5=%
Set sub_folder_name=%sub_folder_name:6=%
Set sub_folder_name=%sub_folder_name:7=%
Set sub_folder_name=%sub_folder_name:8=%
Set sub_folder_name=%sub_folder_name:9=%
:: Create folder, if necessary.
If not exist "%sub_folder_name%" md "%sub_folder_name%\" 
:: Move the file.
Move "%~1" "%sub_folder_name%\"
:: Return to For -command. 
GoTo :EOF

:End
If Defined sub_folder_name Set sub_folder_name=
@Echo Off

これはうまくいきません:

For /L %%a IN (0,1,9) DO Set sub_folder_name=%sub_folder_name:%%~a=%*

これもありません:

...
For /L %%a IN (0,1,9) DO Call :strip_numbers "%%~a"

:strip_numbers
Set sub_folder_name=%sub_folder_name:%~1%
GoTo :EOF

何らかの理由で、Setコマンドは%%~aまたは%~1変数 を受け入れません。

于 2012-10-17T11:27:45.617 に答える