0

質問はタイトルの通りです。バッチを使用して選択したファイルを移動するときに、誤った移動をしました...誤って閉じてしまったので今では遅すぎますが、今後の参考のために知識が欲しいです. コードは次のとおりです。

@ECHO OFF
SETLOCAL
SET relroot=g:\Pictures\Uda 18
(SET relroot=g:\Pictures\Uda 18)
SET "relroot=g:\Pictures\Uda 18"
SET "destdir=g:\Pictures\Uda 18\Sets"
:again
(SET artist=)
SET /p artist="Artist? "
IF NOT DEFINED artist GOTO :eof
MD "%destdir%\%artist%" 2>nul
FOR /f "delims=" %%i IN ( 
   ' dir /s /b /a-d "%relroot%\*%artist%*" '
   ) DO (
 ECHO %%i
MOVE "%%i" "%destdir%\%artist%\%%~nxi" >nul)
)
GOTO again

コードの目的は、入力を取得し、名前に入力が含まれるすべてのファイルをディレクトリ 'Uda 18' 内で検索し、それらをディレクトリ 'Uda 18/Sets' の下の入力にちなんで名付けられたフォルダーに移動することです。思わず「_n.jpg」と入力して、このようなファイルをすべて移動させたら、操作が実行されました。しかし、その後、「Uda 18/Sets」内から何かを移動し、以前に手動で整理していたファイルを効果的に解体したことに気付きました。上記のディレクトリを検索から除外する必要があることに気付きましたが、それはこの質問の焦点では​​ありません。

4

1 に答える 1

1

「戻る」機能を構築できます。最初に for ループを変更し、ファイルを作成しますundo.txt

FOR /f "delims=" %%i IN ( 
   ' dir /s /b /a-d "%relroot%\*%artist%*" '
   ) DO (
>>undo.txt ECHO %%i^|%destdir%\%artist%\%%~nxi
MOVE "%%i" "%destdir%\%artist%\%%~nxi" >nul)

.. そして「元に戻す」には、undo.txtファイルのあるフォルダーから backmove 関数を実行します。

:backmove
for /f "tokens=1*delims=|" %%i in (undo.txt) do move "%%~j" "%%~i"
于 2013-04-27T10:59:43.657 に答える