【问题标题】:How do i set variables literally in batch?如何批量设置变量?
【发布时间】:2014-03-11 16:58:38
【问题描述】:

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

【问题讨论】:

  • 是否提示输入 var3? set /p

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


【解决方案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 的作用域变量
  • 从用户输入中删除了毒字符引用
  • 用引号括起来的文字字符串

【讨论】:

  • 为什么你 "@echo off" "setlocal" 和 "if defined var1 set "var1=%var1: "=% 虽然?对不起,我是新手...但是脚本有效现在
  • @echo off 阻止命令在运行时显示,setlocal 是一种很好的做法,可以将变量限制在脚本中并且不影响命令行的当前运行会话,if defined var1 set "var1=%var1:"=%" 删除用户输入中的双引号字符(如果有)以防止脚本崩溃。
  • 对不起,我不太明白 if defined... 函数是如何工作的
  • @user3407161 if defined var1 检查变量是否为空,set "var1=%var1:"=%" 将变量 var1 设置为表达式的值,%var1:"=% 对 var1 的值进行字符替换替换 double毫无意义的引用"=(等号后为空白)。总结:如果var1不为空,去掉所有双引号,保存回var1中。
【解决方案2】:

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

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

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

set "var3=(ext)s"

你需要转义百分号才能得到想要的结果

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

【讨论】:

  • 当我使用 [Input] C:\Users\Admin>set "var3=%%(title)s.%%(ext)s" C:\Users\Admin 时会发生这种情况>%var3% '%%' 不是内部或外部命令、可运行程序或批处理文件。
  • @user3407161 请展示你的整个脚本。您只是将%var3% 作为命令调用吗?如果要显示其值需要使用echo %var3%;否则,命令行正在尝试执行%var3% 的值。
  • @user3407161,发布的代码用于批处理文件。在命令行中,不需要双百分号。无论如何,在新发布的代码中,将您的 set /p var3=... 更改为 set "var3=%%(title)s.%%(ext)s" 并更改为 -o "c:\...."(带引号)应该可以解决问题。
  • @DavidRuhmann 我正在尝试将其用作 bold C:\Users\Admin\Desktop\Music\Download_dl\%var2%\%var3%
猜你喜欢
  • 1970-01-01
  • 2020-03-31
  • 2011-03-01
  • 2017-04-20
  • 1970-01-01
  • 2014-09-06
  • 2018-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多