1

我想设置"var3=%(title)s.%(ext)s" 但是 windows 继续解释 %(title)s.%(ext)s(ext)s 而不是 %(title)s.%(ext) 有没有办法以字面方式“设置”而不用 cmd 解释它?

编辑有人想看整个剧本

cd C:\youtube-dl
youtube-dl -U 
echo Remember to press enter only AFTER update is complete
pause
set /p "var1=Enter URL: " %=% pause
set "var2=%date:/=-%" 
set /p var3=%(title)s.%(ext)s
youtube-dl "%var1%" -ci -o C:\Users\Admin\Desktop\Music\Download_dl\%var2%\%var3% -f best -x --    no-mtime --add-metadata --write-thumbnail  
cd C:\Users\Admin\Desktop\Music\Download_dl\%var2%
del *.mp4
4

2 回答 2

1

在批处理文件中,%具有特殊含义。在您的代码中

set "var3=%(title)s.%(ext)s"
          ^.........^

指示的百分号用于分隔名为 的变量的名称(title)s.。而且这个变量没有定义(我想从你的输出中),所以你得到的是

set "var3=(ext)s"

您需要转义百分号以获得所需的结果

set "var3=%%(title)s.%%(ext)s"
于 2014-03-11T17:07:43.060 回答
1

要批量保留大多数特殊字符,请将它们括在引号中。这将防止大多数人丢失或翻译成它们的特殊含义。但是,对于%批处理文件,它必须自行转义%%

@echo off
setlocal
cd C:\youtube-dl
youtube-dl -U
echo Remember to press enter only AFTER update is complete
pause
set /p "var1=Enter URL: " %=% pause
if defined var1 set "var1=%var1:"=%"
set "var2=%date:/=-%"
set "var3=%%(title)s.%%(ext)s"
youtube-dl "%var1%" -ci -o "C:\Users\Admin\Desktop\Music\Download_dl\%var2%\%var3%" -f best -x --    no-mtime --add-metadata --write-thumbnail  
cd "C:\Users\Admin\Desktop\Music\Download_dl\%var2%"
del *.mp4
endlocal

变化

  • 具有 setlocal/endlocal 的作用域变量
  • 从用户输入中删除毒字符引用
  • 用引号括起来的文字字符串
于 2014-03-11T19:18:28.590 回答