使用变量中的引号批量处理问题

时间:2014-10-06 08:02:20

标签: batch-file quotes

这里的批处理脚本相对较新,我一直在寻找答案,只是找不到任何东西。

到目前为止,这是我对批处理脚本的所有内容..

@echo off

set addtext="text to add includes spaces"

for /f "delims=" %%l in (file.txt) do (
    echo %%l %addtext% >> tmpfile.txt
)

我想在文件的每一行添加一行文字,但我的问题是双引号。我不希望引号与文本一起显示。
 我只有引号,因为我希望在每行中添加空格。

1 个答案:

答案 0 :(得分:3)

@echo off
    setlocal enableextensions disabledelayedexpansion
    set "addtext=text to add includes spaces"

    for /f "delims=" %%l in (file.txt) do (
        >> tmpfile.txt echo %%l %addtext%
    )

这应该有效。只是不要在变量的值中包含引号,而是使用它们来包装赋值。

如果字符串可能包含更多有问题的字符,则这是一个更安全的版本

@echo off
    setlocal enableextensions disabledelayedexpansion
    set "addtext=text to add includes spaces, > redirections & more problems !"

    (for %%a in ("%addtext%") do for /f "delims=" %%l in (file.txt) do (
        echo %%l %%~a
    )) >> tmpfile.txt 
  1. 引号不包含在值中,但包装分配
  2. 为了防止访问变量的问题,它被包装在引号中,存储在for可替换参数(%%a)中,并且在请求时回显而没有引号(%%~a
  3. 为了获得更好的性能(也应该在第一个代码中使用)而不是打开/写入/关闭每一行的输出文件(每个echo的重定向),重定向将被处理为完整{{ 1}}命令。