批处理文件:双引号内的双引号

时间:2018-12-23 18:54:33

标签: batch-file

我有一个批处理文件,一个执行命令:

forfiles /s /m *.* /c "cmd /c ffmpeg -i C:\dummy.mkv -i @relpath -vcodec copy -acodec copy @relpath.mkv"

如果@relpath参数为空格,则会出现错误:

  

没有这样的文件或目录

我一直在互联网上搜索一个小时,但没有找到解决方法。

我尝试了\"@relpath\"^"@relpath^"""@relpath"" ...无济于事。

任何帮助将不胜感激,因为我花了大约4分钟的时间才能找到正确的方式来递归转换我的所有文件,而其余时间则没有找到解决诸如“我的文件路径”之类的简单问题的解决方案包含空格“ ...


[编辑/] -注释中的(从图像转换为英语)。

请在这里观看FORFILES /S /P . /C "cmd /c echo @RELPATH && dir @RELPATH"的执行情况,您可以在执行dir命令The system cannot find the file specified.的最后看到。如果您手动输入dir和文件名,则可以正常工作。那是我的问题;精确地。

C:\dum my>FORFILES /S /P . /C "cmd /c echo @RELPATH && dir @RELPATH"

".\dir 2"
 Volume in drive C has no label.
 Volume Serial Number is 0CC7-3CE2

 Directory of C:\Dum my\dir 2

23/12/2018  20:38    <DIR>          .
23/12/2018  20:38    <DIR>          ..
23/12/2018  20:38               438 te st.file
               1 File(s)            438 bytes
               2 Dir(s)  30,868,815,872 bytes free
".\dir1"
 Volume in drive C has no label.
 Volume Serial Number is 0CC7-3CE2

 Directory of C:\Dum my\dir1

23/12/2018  20:38    <DIR>          .
23/12/2018  20:38    <DIR>          ..
               0 File(s)              0 bytes
               2 Dir(s)  30,868,815,872 bytes free
".\my file"
 Volume in drive C has no label.
 Volume Serial Number is 0CC7-3CE2

 Directory of C:\Dum my

23/12/2018  20:22               352 my file
               1 File(s)            352 bytes
               0 Dir(s)  30,868,815,872 bytes free
".\dir 2\te st.file"
The system cannot find the file specified.

C:\Dum my>

2 个答案:

答案 0 :(得分:0)

根据我的初始评论,和后续评论中的信息,我建议将@RelPath替换为@Path

ForFiles /S /M *.* /C "ffmpeg -i C:\dummy.mkv -i @Path -vcodec copy -acodec copy @Path.mkv"

答案 1 :(得分:0)

虽然OP通过使用@PATH而非@RELPATH解决了问题,但为什么@RELPATH失败了?

如Compo所述,并在命令输出中看到,引号不是问题。

问题的原因是当前活动目录是什么。让我们对命令进行一些更改

forfiles /S /P . /C "cmd /v /c echo @RELPATH & echo !cd! & dir @RELPATH"

获取此输出(抱歉,西班牙语Windows版本)

W:\dum my>tree /f
Listado de rutas de carpetas para el volumen Nuevo vol
El número de serie del volumen es 0000-0000
W:.
├───dir 1
└───dir 2
        te st.file


W:\dum my>forfiles /S /P . /C "cmd /v /c echo @RELPATH & echo !cd! & dir @RELPATH"

".\dir 1"
W:\dum my
 El volumen de la unidad W es Nuevo vol
 El número de serie del volumen es: 0000-0000

 Directorio de W:\dum my\dir 1

24/12/2018  11:00    <DIR>          .
24/12/2018  11:00    <DIR>          ..
               0 archivos              0 bytes
               2 dirs  47.507.652.608 bytes libres
".\dir 2"
W:\dum my
 El volumen de la unidad W es Nuevo vol
 El número de serie del volumen es: 0000-0000

 Directorio de W:\dum my\dir 2

24/12/2018  11:00    <DIR>          .
24/12/2018  11:00    <DIR>          ..
24/12/2018  11:00                 0 te st.file
               1 archivos              0 bytes
               2 dirs  47.507.652.608 bytes libres
".\dir 2\te st.file"
W:\dum my\dir 2
El sistema no puede encontrar el archivo especificado.

W:\dum my>

forfiles到达te st.file时,当前活动目录已从W:\dum my更改为W:\dum my\dir 2

这意味着尽管从@RELPATH角度来看forfiles的输出是正确的,但是dir命令的路径是错误的,该命令是从另一个目录执行的。

@PATH返回一个绝对路径时,可以独立于当前的活动目录更改来访问要处理的元素。