2016-02-02 6 views
0

. Наиболее близкая вещь, которую я видел здесь, использует команду «mv», которая, по-видимому, не является командой Windows. Команда «Переместить» Windows не будет выполнять задание.командный файл для перемещения всех файлов типа на другой диск, поддерживающий исходное дерево каталогов.

У меня есть текстовый файл, в котором перечислены все файлы, которые нужно переместить, показывая полный путь от c: \ (пример C: \ di1 \ dir2 \ dir3 \ dir4 \ filetomove.png. Некоторые из имена подкаталогов содержат пробелы в них, и нет стандартного порядка. Некоторые из них могут быть на одном уровне с глубокими глубокими уровнями.

Я хотел бы сделать это так, чтобы в итоге появился новый список, такой же, как и старый, за исключением того, что буквой диска будет X: \ вместо C: \

В этих же каталогах есть много других файлов, и их не следует трогать. Только те, что входят в список, с которым я работаю.

+2

Вы пробовали robocopy? https://technet.microsoft.com/en-ca/library/cc733145.aspx – Sarvadi

ответ

0

Действительно, Robocopy более гибкий и менее подвержен ошибкам, но вот несколько пакетных «кодов», которые читают текстовый файл и для каждой строки (при условии, что полный путь каждого файла, который нужно переместить, находится в строке) :

  • «вычисляет» папку назначения (на самом деле заменяет первый символ родительской папки файла - это должно быть буква диска - с тем, что хранится в DESTINATION_DRIVE)
  • тесты, если новый родитель реж существует, и если это не создает его (и все промежуточные dirs) - вот почему команда move используется для отказа: поскольку родительский родительский адрес назначения не существовало. Примечание здесь: если файл с таким же именем существует реж назначения, то операция перемещения, очевидно, не в состоянии
  • выполняет операцию перемещения

Сценарий:

@echo off 
set DESTINATION_DRIVE=e 

for /f "tokens=*" %%f in (files.txt) do (
    call :move_file "%%f" 
) 
goto :eof 

:move_file 
    set _SRC_DIR=%~dp1 
    set _DST_DIR=%DESTINATION_DRIVE%%_SRC_DIR:~1% 
    if not exist "%_DST_DIR%\nul" (
     mkdir "%_DST_DIR%" 
    ) 
    move %1 "%_DST_DIR%" 
    goto :eof 

Как недостаток, после перемещения файлов сценарий может оставить пустые директории на исходном диске.