是否可以撤消批处理文件执行的操作?

时间:2013-04-27 10:00:36

标签: batch-file move undo

问题如标题所示。当使用批量移动选择的文件时,我做了一个有缺陷的举动...现在为时已晚,因为我意外地关闭了它,但为了将来的参考我喜欢这些知识。代码如下:

@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'中移动了东西,并有效地解除了我之前手工组织的文件。我现在意识到我需要从搜索中排除所述目录,但这不是这个问题的焦点。

1 个答案:

答案 0 :(得分: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"
相关问题