2012-02-04 206 views
2

我正在尝试创建批处理文件以将文本文件中列出的多个文件复制到新文件夹中。我发现了几个与此相关的线程,但是我仍然无法让批处理正常工作。我遇到的问题是,txt中列出的文件全部位于不同的源位置,并具有不同的扩展名。名单读起来,例如:批处理:将txt文件中的文件复制到一个文件夹中

C:\用户\富\图片\照片\月\ P1030944.jpg
C:\用户\富\视频\艺术\ \电影类\影片.avi
C:\用户\富\音乐\爵士\ 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-另一个文件夹) – 2012-07-12 12:35:11

回答

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="选项;如果文件名包含空格,则两者都需要。

最后要注意目标文件夹中可能存在的重复名称。如果可能的话,你需要找到应对这种碰撞的策略。但是这可能是另一个SO问题的主题,不是吗?这工作对我来说

+1

它不会与包含空格的项目工作(但我会离开这个作为一个任务,OP - 如果你的第一个点之后,这应该不是太难解决:-) – wmz 2012-02-04 18:25:32

+0

真棒,谢谢PA!这工作完美,不得不少量调整,但它确实是我需要的。我想我对上面解释的n和x修饰符缺乏了解。再次感谢! – user1189644 2012-02-04 18:39:46

+0

@wmz你是对的,明天我将编辑我的答案与在input.txt的文件名包含空格 – 2012-02-04 20:09:53

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 2016-11-14 07:03:15

+0

这是OP想要什么。看到问题的第一行。他只是试图将文件复制到“新文件夹”中 – geoji 2016-11-14 19:37:49

相关问题