Вопрос или проблема
Я просмотрел множество тем о пакетной обработке из списка, но ничего подходящего не нашел. У меня есть текстовый файл со списком файлов, включая пути. Мне нужно сначала скопировать эти файлы на внешний диск, а затем удалить оригинальные файлы с системного диска. Приведенный ниже пакетный файл работает, но есть одна проблема: мне нужно восстановить структуру папок при копировании файлов на внешний диск. Например, если интересующий файл – это 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 Все файлы скопированы в папку восстановления.
@echo off
for /f "tokens=* delims=" %%a in ('type "D:\files.txt"') do del "%%a"
echo Все файлы удалены с устройства.
pause
Я думаю, что вам нужно что-то вроде этого. Если файл не удается скопировать, он записывается в 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")
)
Ответ или решение
Конечно! Вам нужно создать пакетный файл, который будет копировать файлы из списка с учетом создания структуры каталогов, а также эффективно обрабатывать ошибки. Ниже я представляю вам доработанную версию вашего пакетного файла с необходимыми дополнениями.
@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" >nul 2>&1
IF ERRORLEVEL 1 (
echo "%%a" >> "Errors.txt"
) else (
del /q "%%a"
)
)
echo Все файлы обработаны. Проверьте Errors.txt на наличие ошибок.
pause
Объяснение кода:
-
Установка переменных:
Source
— это путь к вашему текстовому файлу со списком файлов, аDestination
— это папка назначения на внешнем диске. -
Отложенное расширение: Включается отложенное расширение переменных, что позволяет использовать переменные, изменяемые в цикле.
-
Цикл по файлам: Мы читаем каждую строку из файла
files.txt
, где каждая строка соответствует пути к исходному файлу. -
Создание директории: Проверяется наличие директории назначения. Если директория не существует, создается новая.
-
Копирование с обработкой ошибок:
xcopy
копирует файл. Если происходит ошибка (например, файл не найден), то файл записывается вErrors.txt
. В противном случае удаляется исходный файл. -
Сообщение о завершении: В конце выводится сообщение о завершении обработки файлов и просьба проверить файл ошибок.
Обработка ошибок:
- Все ошибки во время копирования записываются в
Errors.txt
. Таким образом, вы можете проанализировать, какие файлы не были скопированы и почему.
Это решение должно полностью удовлетворять вашим требованиям по копированию и удалению файлов с ошибками. Если у вас остались вопросы или нужны уточнения, не стесняйтесь обращаться!