我正在尝试创建批处理文件,以将文本文件中列出的多个文件复制到新文件夹。我找到了几个与此相关的线程,但我仍然无法让批处理正常工作。我遇到的问题是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)
任何帮助/想法?
答案 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及更高版本中,因此这种方法就像使用批处理命令一样简单。