批处理:从列表中复制然后删除文件;需要错误处理

批处理:从列表中复制然后删除文件;需要错误处理

我查看了这里的许多批处理列表主题,但没有找到任何有意义的内容。我有一个包含文件列表(包括路径)的文本文件。我需要先将这些文件复制到外部驱动器,然后从系统驱动器中删除原始文件。下面的批处理文件可以正常工作,但有一个小问题:当文件复制到外部驱动器时,我需要重新创建文件夹结构。例如,如果感兴趣的文件是 C:\foo\foo.txt,我需要将其复制到外部驱动器上的 \foo 目录中。我以为我已经设置了 xcopy 参数来执行此操作,但它只是将所有内容复制到一个文件夹中。

接下来,我想在批处理文件中进行一些错误处理,以防某些文件不存在。

非常感谢您的帮助!以下是我目前所得到的...

@echo off
for /f "tokens=* delims=" %%a in ('type "D:\files.txt"') do xcopy  /shrkvy "%%a" "D:\Reclamation"
echo All files copied to reclamation folder.
@echo off
for /f "tokens=* delims=" %%a in ('type "D:\files.txt"') do del "%%a"
echo All files deleted from device.
pause

答案1

我认为你想要的是这样的。如果文件复制失败,它将被写入errors.txt,而不会从源中删除。成功复制的文件将从源中删除。

@echo off

set Source=D:\files.txt
set Destination=D:\Reclamation

SetLocal EnableDelayedExpansion

for /f "tokens=* delims=" %%a in ('type "%Source%"') do (
                                                         IF not exist "%Destination%%%~pa" md "%Destination%%%~pa"
                                                         xcopy /shrkvy "%%a" "%Destination%%%~pa"
                                                         IF NOT !ErrorLevel! EQU 0 (echo "%%a">>"Errors.txt") else (del /q "%%a")
                                                        )

相关内容