BATCH命令向ECHO输入一个包含引号,括号和变量到txt文件的字符串

时间:2016-12-11 17:22:44

标签: string batch-file echo

我希望批处理文件在文件夹中循环并导出一个字符串,其中包含文件夹中文件的文件名/路径。到目前为止,我已经建立了:

for %%F in (*.mp4) do (
echo Folder=("C:\VIDS") VID=("%%~dpnxF") >> "%%F".text
)

echo命令在同一行的括号和引号都需要回显到文件中(除"%%F"命令中的引号外,因为这显然是名称要输出的文件,而不是字符串本身。)

此公式错误为VID was not expected at this time

然而,这有效:

for %%F in (*.mp4) do (
echo "Folder=("C:\VIDS") VID=("%%~dpnxF")" >> "%%F".text
)

但封闭的引号也会输出到文件中,这是我不想要的。

我已尝试使用插入符号(^),波浪线(~)以及其他帖子中建议的斜杠来转义第一个公式的字符串中的引号但不起作用。

2 个答案:

答案 0 :(得分:2)

正如评论已经指出的那样,问题不是由引号引起的,而是由括号引起的。

只要echo命令没有出现在带括号的代码块中,您就可以输出文字括号而不会出现任何问题:

rem // This will work:
echo Folder=("C:\VIDS") VID=("%%~dpnxF")

只要echo命令出现在带括号的块中,关闭)就会无意中关闭块。要解决这个问题,您需要通过插入符号^来转义要输出的任何右括号:

rem // This will fail:
(
    echo Folder=("C:\VIDS") VID=("%%~dpnxF")
)

rem // But this will work:
(
    echo Folder=("C:\VIDS"^) VID=("%%~dpnxF"^)
)

rem // This will work too
rem // (the opening parentheses do not need to be escaped, but it does not harm either):
(
    echo Folder=^("C:\VIDS"^) VID=^("%%~dpnxF"^)
)

要将此应用于您的代码,它应如下所示:

for %%F in (*.mp4) do (
    echo Folder=("C:\VIDS"^) VID=("%%~dpnxF"^) >> "%%~F.text"
)

还请注意已修改报价的已更改的重定向部分>> "%%~F.text"

为了避免在每一行输出尾随 SPACE ,您可以删除重定向运算符>>前面的 SPACE ;您还可以在echo命令前面说明重定向部分:

for %%F in (*.mp4) do (
    >> "%%~F.text" echo Folder=("C:\VIDS"^) VID=("%%~dpnxF"^)
)

答案 1 :(得分:0)

以下(没有不必要的括号),似乎按预期工作:

For %%F In (*.mp4) Do Echo=Folder=("C:\VIDS") VID=("%%~dpnxF")>>"%%F".text

但我建议您将"%%F".text更改为"%%F.text"