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

Batch file 是否可以撤消批处理文件执行的操作?,batch-file,move,undo,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=

问题正如标题所说。我做了一个有缺陷的移动时,移动选择的文件使用批。。。现在已经太晚了,因为我不小心把它合上了,但为了将来的参考,我想了解一下。代码如下:

@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/套”中的东西都移走了,并且有效地取消了我以前手工组织的文件的组织。我现在意识到我需要从搜索中排除上述目录,但这不是这个问题的重点

您可以构建“后退”功能。 首先修改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"

没有简单的
undo
命令,你必须用更多的批处理命令来撤销你的工作。我觉得这就是答案。有没有办法确定文件最后一次出现在哪里,然后将它们返回那里?我太累了,想不出一个简单的解决方案。祝你好运。这就是为什么你总是先回应你的动作。系统备份是撤销某些操作的另一种方式。如果你没有,那么就这样做:)啊,太棒了!真不敢相信我从没想过这个主意。。。不过,谢谢!