Пакетное: Копировать файлы из TXT-файла в одну папку - PullRequest
2 голосов
/ 04 февраля 2012

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

C: \ Users \ Foo \ Pictures \ Photographs \ September \ P1030944.jpg
C: \ Users \ Foo \ Videos \ Art \ Movies \ 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)

Любая помощь / идеи?

Ответы [ 3 ]

5 голосов
/ 04 февраля 2012

Начните чтение 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="; оба необходимы, если имена файлов содержат пробелы.

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

0 голосов
/ 06 января 2016

Я обнаружил, что самый простой способ сделать это - использовать скрипт 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 голосов
/ 05 марта 2014

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

Замените мои каталоги C: \ what и 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"

С уважением,

Готфрид

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...