如何在批处理中逐字设置变量?

时间:2014-03-11 16:58:39

标签: batch-file cmd batch-processing youtube-dl

我想设置"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

2 个答案:

答案 0 :(得分:1)

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

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

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

set "var3=(ext)s"

您需要逃避百分号才能获得所需的结果

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

答案 1 :(得分: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
  • 作用域的变量
  • 从用户输入中删除了毒药字符引用
  • 用引号括起来的文字字符串