问题如标题所示。当使用批量移动选择的文件时,我做了一个有缺陷的举动...现在为时已晚,因为我意外地关闭了它,但为了将来的参考我喜欢这些知识。代码如下:
@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'中移动了东西,并有效地解除了我之前手工组织的文件。我现在意识到我需要从搜索中排除所述目录,但这不是这个问题的焦点。
答案 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"