我希望批处理文件在文件夹中循环并导出一个字符串,其中包含文件夹中文件的文件名/路径。到目前为止,我已经建立了:
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
)
但封闭的引号也会输出到文件中,这是我不想要的。
我已尝试使用插入符号(^
),波浪线(~
)以及其他帖子中建议的斜杠来转义第一个公式的字符串中的引号但不起作用。
答案 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"