【问题标题】:Parsing command parameters containing quotes [duplicate]解析包含引号的命令参数[重复]
【发布时间】:2020-05-24 12:18:00
【问题描述】:

非常感谢有关如何进行以下工作的一些建议。

我正在使用 CMD 脚本来制作快捷方式 LNK 文件。它通过使用>> 将各种命令回显到 VBS 文件来实现这一点。

其中一个命令称为oLink.Arguments

目前我的工作示例设置如下:

oLink.Arguments = "/run /tn Custom_Scripts\TaskName" >>%VBSScript%

这仅适用于Custom_Scripts\TaskName 中没有空格的情况。但是,我需要脚本来处理包含空格的任务名称。

我需要做的只是手动放置引号,如下所示:

"Custom_Scripts\TaskName"

但是,当设置时,命令行无法输出该行,因为已经存在引号。

例子:

oLink.Arguments = "/run /tn "Custom_Scripts\TaskName"" >>%VBSScript%

不起作用。我尝试了各种方法,例如三引号或转义引号,但没有成功。

如果我没有很好地解释这一点,我深表歉意,但希望那里的人可能有他们愿意与我分享的解决方案或想法。

编辑:

来自我在this 答案下方的评论。

SCRIPT="%TEMP%\%RANDOM%-%RANDOM%-%RANDOM%-%RANDOM%.vbs"
echo Set oWS = WScript.CreateObject("WScript.Shell") >> %SCRIPT%
echo sLinkFile = "C:\TechTools\Scripts\Create_an_elevated_shortcut\myshortcut.lnk" >> %SCRIPT%
echo Set oLink = oWS.CreateShortcut(sLinkFile) >> %SCRIPT%
echo oLink.TargetPath = "C:\TechTools\O&O\ShutUp10\OOSU10.exe" >> %SCRIPT%
echo oLink.Arguments = "/run /tn Custom_Scripts\Task_Name" >> %SCRIPT%
echo oLink.Save >> %SCRIPT%
cscript /nologo %SCRIPT%

只要"Custom_Scripts\Task_Name" 中没有空格,此方法就有效。

【问题讨论】:

  • 无法复制。 echo oLink.Arguments = "/run /tn "Custom Scripts\TaskName"" >>test.txtoLink.Arguments = "/run /tn "Custom Scripts\TaskName"" 写入文件中。

标签: batch-file vbscript parameters shortcut quoting


【解决方案1】:

尝试将字符 " 替换为 chr(34)


echo=Chr(34)oLink.Arguments = Chr(34)/run /tn Chr(34)Custom_Scripts\TaskNameChr(34)>>"%VBSScript%"

) == ^)

中使用转义
@echo off

set "_SCRIPT=%TEMP%\%RANDOM%-%RANDOM%-%RANDOM%-%RANDOM%.vbs"
>"%_SCRIPT%" ( 
    echo= Set oWS = WScript.CreateObject("WScript.Shell"^)
    echo= sLinkFile = "C:\TechTools\Scripts\Create_an_elevated_shortcut\myshortcut.lnk"
    echo= Set oLink = oWS.CreateShortcut(sLinkFile^)
    echo= oLink.TargetPath = "C:\TechTools\O&O\ShutUp10\OOSU10.exe"
    echo= oLink.Arguments = "/run /tn ""Custom Scripts\Task Name""" 
    echo= oLink.Save
)
%__APPDIR__%cscript.exe /nologo "%_SCRIPT%" 

Obs.:这是输出回显文件吗


 Set oWS = WScript.CreateObject("WScript.Shell")
 sLinkFile = "C:\TechTools\Scripts\Create_an_elevated_shortcut\myshortcut.lnk"
 Set oLink = oWS.CreateShortcut(sLinkFile)
 oLink.TargetPath = "C:\TechTools\O&O\ShutUp10\OOSU10.exe"
 oLink.Arguments = "/run /tn ""Custom Scripts\Task Name"""
 oLink.Save

Obs.:这是Custom Scripts\Task Name子文件夹吗?


@echo off

set "_SCRIPT=%TEMP%\%RANDOM%-%RANDOM%-%RANDOM%-%RANDOM%.vbs"
>"%_SCRIPT%" ( 
    echo= Set oWS = WScript.CreateObject("WScript.Shell"^)
    echo= sLinkFile = "C:\TechTools\Scripts\Create_an_elevated_shortcut\myshortcut.lnk"
    echo= Set oLink = oWS.CreateShortcut(sLinkFile^)
    echo= oLink.TargetPath = "C:\TechTools\O&O\ShutUp10\OOSU10.exe"
    echo= script_folder = replace(WScript.ScriptFullName,WScript.ScriptName,""^)
    echo= script_folder = chr(34^)^&script_folder^&"Custom Scripts\Task Name"^&chr(34^)
    echo= WScript.Echo script_folder
    echo= WScript.Echo "/run /tn "^&script_folder
    echo= oLink.Arguments = "/run /tn "^+script_folder
    echo= WScript.Echo  oLink.Arguments
    echo= oLink.Save
)
%__APPDIR__%cscript.exe /nologo "%_SCRIPT%" 


  • 输出测试:WScript.Echo
"C:\Users\ecker\AppData\Local\Temp\Custom Scripts\Task Name"
/run /tn "C:\Users\ecker\AppData\Local\Temp\Custom Scripts\Task Name"
/run /tn "C:\Users\ecker\AppData\Local\Temp\Custom Scripts\Task Name"


Adding quotes to a string in vbscript

【讨论】:

  • 似乎没有帮助。 echo off set SCRIPT="%TEMP%\%RANDOM%-%RANDOM%-%RANDOM%-%RANDOM%.vbs" echo Set oWS = WScript.CreateObject("WScript.Shell") >> %SCRIPT% echo sLinkFile = "C:\TechTools\Scripts\Create_an_elevated_shortcut\myshortcut.lnk" >> %SCRIPT% echo Set oLink = oWS.CreateShortcut(sLinkFile) >> %SCRIPT% echo oLink.TargetPath = "C:\TechTools\O&O\ShutUp10\OOSU10 .exe" >> %SCRIPT% echo oLink.Arguments = "/run /tn Custom_Scripts\Task_Name" >> %SCRIPT% echo oLink.Save >> %SCRIPT% cscript /nologo %SCRIPT% 只要没有“Custom_Scripts\Task_Name”中的空格。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-17
  • 2021-03-20
  • 2020-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-25
  • 2012-06-20
相关资源
最近更新 更多