我有一个c:\test
目录,其中包含以下3行的文本文件var_list.txt
:
abc
xyz
def
我有一个C:\test\source
目录,其中包含一个文本文件source_file.txt
。
我有一个C:\test\target
目录是空的。
我想编写一个执行以下任务的Windows批处理文件:
var_list.txt
source_file.txt
从C:\test\source
目录复制到
C:\test\target
目录,文件名也在其名称中附加了变量行因此,当我运行此Windows批处理文件时,我希望它创建这3个文件:
所以我在create_target_files.bat
目录中创建了一个包含以下内容的Windows批处理文件c:\test
:
@echo off
for /f "tokens=*" %%a in (var_list.txt) do (
echo line=%%a
copy /Y /V C:\test\source\source_file.txt C:\test\target\target_file_%a%.txt
)
pause
当我运行它时,我得到了这个输出:
line = abc
已复制1个文件。
line = xyz
已复制1个文件。
line = def
已复制1个文件。
按任意键继续。 。 。
但是在C:\test\target
目录中,只创建了1个文件target_file_.txt
。为什么不使用变量名创建3个文件?
答案 0 :(得分:1)
您的代码中存在一个小错误。
copy /Y /V C:\test\source\source_file.txt C:\test\target\target_file_%a%.txt
在这行代码中,您使用的是%a%
而不是%%a
。
由于您没有分配变量,%a%
会给您一个空字符串。
因此,所有复制的文件都被命名为 target_file_.txt ,并被最后一个文件覆盖。
答案 1 :(得分:0)
你可以这样做:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%a in ('Type "C:\test\var_list.txt"') do (
Set "line=%%a"
echo !line!
Copy /y /v "C:\test\source\source_file.txt" "C:\test\target\target_file_!line!.txt"
)
pause & exit
有关如何以及何时使用 Enabledelayedexpansion
的详细信息