使用bat批处理读取txt文件中的文件名list,并将文件复制到指定目录下。

需求

想要从有多个深层目录下的众多文件中挑选出部分文件,并且保留目录结构,一个一个去找比较麻烦,就写了这个批处理。

示例

例子中的注释已经比较详细了,直接看就能明白,使用时注意修改 txt文件名目录路径

test.bat

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
::声明更改代码页为UTF-8
chcp 65001
@echo off
echo ------------------开始---------------------
:: for循环逐行读取test.txt
for /f   %%i in (test.txt)  do (
::设置本地为延迟扩展。其实也就是:延迟变量,
::开始与终止批处理文件中环境改动的本地化操作。
::在执行 Setlocal 之后所做的环境改动只限于批处理文件。
::要还原原先的设置,必须执行 Endlocal。
SetLocal EnableDelayedExpansion
::打印读取到的值到控制台
echo %%i
::设置变量str,并设置为%%i的值
set str=%%i
::替换str中的from为to
Set str=!Str:from=to!
::将替换后的值写到1.txt
echo !str!>>1.txt
::复制%%i 到 str,取消提示“是文件名还是目录名”,默认选择复制文件f,文件夹d,
echo f | xcopy %%i !str! /Y >>log.log
EndLocal
)
echo ------------------结束---------------------
::删除文件
del 1.txt
echo. & pause

test.txt

1
2
3
4
5
6
7
8
9
C:\test\from\1\1.txt
C:\test\from\1\11\11.txt
C:\test\from\1\11\111\111.txt
C:\test\from\2\2.txt
C:\test\from\2\22\22.txt
C:\test\from\2\22\222\222.txt
C:\test\from\3\3.txt
C:\test\from\3\33\33.txt
C:\test\from\3\33\333\333.txt