【问题标题】:Batch - set argument as variable without resolving eventual variable inside argument批处理 - 将参数设置为变量而不解析参数内的最终变量
【发布时间】:2014-02-04 14:07:29
【问题描述】:

我正在尝试找到一种方法来解决我遇到的脚本问题。我已经用简短的脚本模拟了我的问题,因此不必阅读长代码。

基本上我想要/需要实现的是用参数开始我的批处理,并以与脚本用户定义的相同方式使用参数,但是用转义字符替换百分号,后跟百分号 (% > ^%) .但是如果参数包含一些现有变量,例如 %date%

,则会出现问题

这是我的代码的简短版本:

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
set "x=%~1"
set "y=!x:%%=^^%%!"
echo %y%

参数可以包含任何内容,但也可以如下所示:

script.bat "this should be just plain text - %date%"

批处理脚本的预期输出如下:

this should be just plain text - ^%date^%

然而,变量似乎被立即解决了,尽管百分号甚至没有被转义,因为它找不到任何东西。如果参数不包含任何变量,它工作得很好,但这种方式输出看起来像这样:

this should be just text - Wed 01/15/2014

我试图避免任何额外的脚本语言使用(如 VBS)和任何其他应用程序的使用,而是使用 VBS 方式,例如比没有。 任何帮助、帮助或提示如何实现这一点将不胜感激。

【问题讨论】:

    标签: batch-file cmd command-line-arguments


    【解决方案1】:

    只要您调用 script.bat%date% 变量就会被扩展 - 因此在您的脚本中 %1 将已经具有扩展的 %date% 变量。调用脚本时必须添加插入符号 -

    script.bat "this should be just plain text - ^%date^%"
    

    【讨论】:

    • 感谢您的评论。我是这么想的,但只是希望找到一些解决方法来缓解这种需求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    相关资源
    最近更新 更多