Windows 批处理:从文本文件中的行构建字符串
Windows Batch: Build string from lines in text file
我有一个简单的文本文件,每个文件包含一个文件名。我想合并所有这些文件。我的计划是读取文本文件,构建一个类似于 "filename1+file2+f3" 的字符串,然后将其用作复制 /b.
的参数
但是,我无法正确读取文件。
这是我现在拥有的:
SET x=
FOR /F %%G IN (merge.txt) DO SET x=%x%+%%G
ECHO %x%
然而,这里的 "recursion" 似乎无法正常工作,%x% 只是设置为“+fl”,其中 fl 是文件中的最后一个文件名。
如何正确执行此操作?
你的逻辑是对的,只是你漏掉了延迟扩展的用法。
SETLOCAL EnableDelayedExpansion
SET "x="
FOR /F %%G IN (merge.txt) DO SET x=!x!+%%G
ECHO %x%
REM Trim the leading +
SET x=%x:~1,999%
ECHO %x%
ENDLOCAL
没有延迟扩展,%x%
仅在 FOR
循环开始时计算 ,因此每次迭代都会为空白。通过启用延迟扩展,!x!
(此符号)会在每次迭代时进行评估,因此它将构建您正在寻找的复合字符串。
我有一个简单的文本文件,每个文件包含一个文件名。我想合并所有这些文件。我的计划是读取文本文件,构建一个类似于 "filename1+file2+f3" 的字符串,然后将其用作复制 /b.
的参数但是,我无法正确读取文件。
这是我现在拥有的:
SET x=
FOR /F %%G IN (merge.txt) DO SET x=%x%+%%G
ECHO %x%
然而,这里的 "recursion" 似乎无法正常工作,%x% 只是设置为“+fl”,其中 fl 是文件中的最后一个文件名。
如何正确执行此操作?
你的逻辑是对的,只是你漏掉了延迟扩展的用法。
SETLOCAL EnableDelayedExpansion
SET "x="
FOR /F %%G IN (merge.txt) DO SET x=!x!+%%G
ECHO %x%
REM Trim the leading +
SET x=%x:~1,999%
ECHO %x%
ENDLOCAL
没有延迟扩展,%x%
仅在 FOR
循环开始时计算 ,因此每次迭代都会为空白。通过启用延迟扩展,!x!
(此符号)会在每次迭代时进行评估,因此它将构建您正在寻找的复合字符串。