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)

.. 并“撤消”从包含文件的文件夹中运行 backmove 函数undo.txt

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