批处理:将文件从txt文件复制到一个文件夹中

时间:2012-02-04 17:55:04

标签: batch-file copy xcopy

我正在尝试创建批处理文件,以将文本文件中列出的多个文件复制到新文件夹。我找到了几个与此相关的线程,但我仍然无法让批处理正常工作。我遇到的问题是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\

但我需要它从列表本身收集信息 如果有帮助我知道txt中只有39种不同的特定扩展名的文件(* .jpg * .gif * .png ... * .xhtml * .xht)

任何帮助/想法?

3 个答案:

答案 0 :(得分: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 :(得分:0)

一个为我工作的样本......

将你的目录C:\ whatever和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"

此致

戈特弗里德

答案 2 :(得分:-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及更高版本中,因此这种方法就像使用批处理命令一样简单。