Batch file 获取批处理文件中的原始参数或命令

Batch file 获取批处理文件中的原始参数或命令,batch-file,cmd,Batch File,Cmd,在批处理文件中,是否有任何方法可以获取原始参数或命令?例如,给定以下批处理文件: echo "%1" 然后运行: my-file.bat ^1.1 我希望它输出^1.1,但是^是一个特殊的字符转义字符,因此它会被计算,%1包含1.1 通过在输入命令时转义插入符号(例如,my-file.bat^^1.1)可以解决此问题,但这在我的情况下是不需要的,因为我正在构建一个跨平台工具,该工具也有一个shell实现(提供^1.1) 所以我想知道: 是否有方法获取“^1.1”的原始未赋

在批处理文件中,是否有任何方法可以获取原始参数或命令?例如,给定以下批处理文件:

echo "%1"
然后运行:

my-file.bat ^1.1
我希望它输出
^1.1
,但是
^
是一个特殊的字符转义字符,因此它会被计算,
%1
包含
1.1

通过在输入命令时转义插入符号(例如,
my-file.bat^^1.1
)可以解决此问题,但这在我的情况下是不需要的,因为我正在构建一个跨平台工具,该工具也有一个shell实现(提供
^1.1

所以我想知道:

  • 是否有方法获取“^1.1”的原始未赋值参数文本
  • 或者,是否有方法获取原始命令字符串或最后执行的命令文本?然后我就可以拿着这个做我自己的解析了
  • 谢谢

    肖特:你不能

    朗:你不能得到任何组合,但很多

    插入符号是最有问题的字符,因为它转义下一个字符,并在生成参数之前被删除。
    因此,不可能获得原始的原始输入

    但也存在一些或多或少的防弹技术。
    大多数情况下的最佳解决方案:
    有一些小缺点

    但是,如果通过外部进程调用批处理文件,则可以使用
    cmdline
    变量,这是最好的解决方案,因为可以非常轻松地访问参数

    顺便说一句,在你的赋中,你可能会遇到另一个问题。
    当您试图使用完全相同的参数调用另一个批处理文件或可执行文件时,您必须先将其转义。

    即使是这一部分也不容易

    您如何传递发送到批处理文件的内容,并将其评估为
    %1
    ?另外,我非常怀疑您的意图是否真的是
    echo
    它,那么您使用该输入参数做什么呢?@Compo
    echo“%1”
    在批处理文件中就是一个例子。它在cmd中调用它,比如
    my-file.bat^1.1
    。我想以某种方式在批处理文件中使用插入符号获取
    ^1.1
    ,但是
    %1
    包含
    1.1
    ,而不是
    ^1.1
    。我意识到这是因为
    ^
    是一个转义字符。当你说你在cmd中调用它时,这是否意味着你打开了一个
    cmd.exe
    窗口,其中
    my file.bat
    目录是你的当前目录,并且你在物理上键入
    my-file.bat^1.1
    并按下
    [ENTER]
    键?我还问你打算对输入参数做什么。我问你是因为你刚打过,所以应该已经知道你打了什么。你一定在用它执行其他任务@Compo
    my file.bat
    cmd.exe
    窗口当前目录中的一个文件,其中包含文本
    echo“%1”
    。我正在键入
    my-file.bat^1.1
    并按enter键。输出是
    1.1
    ,但我想要的输出是
    ^1.1
    。是的,为了这个问题,我已经把这个问题简化为一个非常简单的例子。我希望将
    ^1.1
    的输入以某种方式存储在一个批处理变量中,然后我将使用它执行其他操作。我不希望使用简化的示例,因为在真实的批处理脚本中,没有人会执行您正在执行的操作。很明显,您打算将此参数用于除
    echo
    之外的其他内容,攻击此参数的最佳方法是将其作为其中的一部分,而不仅仅是将非必需的
    echo
    粘贴在其中,并希望得到满足脚本真正目的的答案。谢谢!我只是在批处理文件之外使用进行一些测试,这似乎也不可能。您现在能理解@DavidSherret了吗?为什么我坚持要知道脚本的意图是什么,而不是仅仅假设
    echo%1
    的答案就够了。@DavidSherret在本例中Compo是正确的。从命令行、每次拖放或通过另一个进程调用批处理的方式有很大的不同。每个变量都有不同的规则和部分解决方案。cmd.exe是一个非常讨厌的Beasta,正如我所说,它是指有人在cmd.exe进程的命令行上手动输入命令。感谢Jeb回答我的问题,即是否可以获取用户在批处理文件中输入的原始命令行文本@我可以,但这与我的问题无关。