use*_*644 2 copy xcopy batch-file
我正在尝试创建批处理文件,以将文本文件中列出的多个文件复制到新文件夹.我找到了几个与此相关的线程,但我仍然无法使批处理正常工作.我遇到的问题是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%"
Run Code Online (Sandbox Code Playgroud)
或延伸即
for /R c:\source %f in (*.xml) do copy "%f" x:\destination\
Run Code Online (Sandbox Code Playgroud)
但我需要它从列表本身收集信息.
如果有帮助我知道txt中只有39种不同的特定扩展名的文件(*.jpg*.gif*.png ...*.xhtml*.xht)
任何帮助/想法?
开始阅读HELP FOR,然后在命令提示符下尝试以下操作
FOR /F %a in (input.txt) DO @ECHO COPY %a c:\newfolder\%~nxa
Run Code Online (Sandbox Code Playgroud)
你可以看到它%a被扩展到输入文件中的实际行,这%~nxa是从文件中提取名称和扩展名的一种方法.
仔细测试后,将命令移至BAT文件,替换%a为%%a并删除ECHO命令
@echo off
SET destfolder=c:\newfolder
FOR /F "delims=" %%a IN (input.txt) DO COPY "%%a" "%destfolder%\%%~nxa"
Run Code Online (Sandbox Code Playgroud)
注意用引号括起名字"; 并包括"delims="选项; 如果文件名包含空格,则需要两者.
最后要小心目标文件夹中可能的名称重复项.如果可能,您需要找到应对此类冲突的策略.但这可能是另一个SO问题的主题,不是吗?