我有一个批处理文件,一个执行命令:
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>
答案 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
返回一个绝对路径时,可以独立于当前的活动目录更改来访问要处理的元素。