2012-02-04 2 views
2

Я пытаюсь создать пакетный файл для копирования нескольких файлов, перечисленных в текстовом файле, в новую папку. Я нашел несколько потоков, связанных с этим, но я все еще не могу заставить пакет работать правильно. Проблема, с которой я сталкиваюсь, заключается в том, что файлы, перечисленные в txt, находятся в разных источниках и имеют разные расширения. Список читает, например:Пакет: копирование файлов из txt-файла в одну папку

C: \ Users \ Foo \ Pictures \ Фотографии \ сентябрь \ P1030944.jpg
C: \ Users \ Foo \ Видео \ Art \ Фильмы \ Class \ movie.avi
C: \ Users \ Foo \ Music \ Jazz \ 20051.mp3
... и т.д.

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

set src_folder=c:\whatever\ 
set dst_folder=c:\foo 
for /f %%i in (File-list.txt) DO xcopy /S/E/U "%src_folder%\%%i" "%dst_folder%" 

или расширение, т.е.

for /R c:\source %f in (*.xml) do copy "%f" x:\destination\ 

но мне нужно, чтобы собрать эту информацию из самого списка.
Если это поможет, я знаю, что есть только файлы возможных 39 различных конкретных расширений в TXT (* .jpg * .gif * .png ... * * .xhtml .xht)

Любой помощи/идеи ?

+0

Возможный дубликат [Пакетный файл для копирования файлов из одной папки в другую папку] (http://stackoverflow.com/questions/986447/batch-file-to-copy-files-from-one-folder-to- другая-папка) –

ответ

5

Начать чтение HELP FOR, а затем попробуйте следующую команду в командной строке

FOR /F %a in (input.txt) DO @ECHO COPY %a c:\newfolder\%~nxa 

вы можете увидеть, что %a получает расширен до фактической строки в файле ввода, и что %~nxa способ извлечь имя и расширение из файла.

После тщательного тестирования, переместите команду в файл BAT, замените %a на %%a и удалите команду ECHO

@echo off 
SET destfolder=c:\newfolder 
FOR /F "delims=" %%a IN (input.txt) DO COPY "%%a" "%destfolder%\%%~nxa" 

Уведомления о упаковке.Размерах имен с кавычками "; и включение опции "delims="; оба необходимы, если имена файлов содержат пробелы.

Наконец, будьте осторожны с возможными дублируемыми именами в папке назначения. Если это возможно, вам нужно найти стратегию, позволяющую справиться с такими столкновениями. Но это может быть предметом другого вопроса, не так ли?

+1

он не будет работать с записями, содержащими пробелы (но я оставил бы это как задачу для OP - если ваша первая точка будет следовать, это не должно быть слишком сложно решить :-) – wmz

+0

Удивительно, спасибо PA! это прекрасно работает, приходилось на минимальное количество настроек, но оно делает именно то, что мне нужно. Наверное, мне не хватало знаний о модификаторах n и x, которые вы объяснили выше. Еще раз спасибо! – user1189644

+0

@wmz вы правы, завтра я отредактирую свой ответ с решением для случая, имена файлов в input.txt содержат пробелы –

0

Один образец, который работал для меня ...

Заменить мои каталоги C: \ независимо и C: \ Temp \ SVN с вашими ...

при условии, что ваш список файлов с именем antidump_list.txt и находится под C: \ Temp \ SVN \

 
> set src_folder=C:\whatever 
> set dst_folder=C:\temp\svn 
> for /f %%i in (C:\temp\svn\antidump_list.txt) DO copy "%src_folder%\%%i" "%dst_folder%\%%i" 

С уважением,

Готфрид

-1

Я обнаружил, что самый простой способ сделать это - использовать скрипт powershell.

$Files = Get-Content File-list.txt 
$Dest = "C:\output" 

foreach ($File in $Files) { 
    Copy-Item $File $Dest 
} 

Если вам необходимо запустить его из пакетного файла, вставьте выше сценарий в файл с именем CopyFiles.ps1 и добавьте следующую команду в пакетный файл

powershell -executionpolicy bypass -file .\CopyFiles.ps1 

Поскольку PowerShell включен по умолчанию Windows7 и новее, этот метод так же просто, как делать то же самое с командами пакетных команд.

+0

копирует весь файл в той же папке, что и в каталоге src – gladiator

+0

То есть что хочет OP. См. Первую строку вопроса. Он просто пытается скопировать файлы в «новую папку» – geoji

Смежные вопросы