【发布时间】:2021-01-20 13:49:15
【问题描述】:
在批处理文件中,有没有办法获取原始参数或命令?例如,给定以下批处理文件:
echo "%1"
然后运行:
my-file.bat ^1.1
我希望它输出^1.1,但^ 是一个特殊字符——转义字符——所以它被评估并且%1 包含1.1。
可以通过在输入命令时转义插入符号来解决此问题(例如my-file.bat ^^1.1),但这在我的情况下是不希望的,因为我正在构建一个也具有 shell 实现的跨平台工具(其中提供^1.1 作品)。
所以我想知道:
- 有没有办法获取“^1.1”的原始未评估参数文本?
- 或者有没有办法获取原始命令字符串或最后执行的命令文本?然后我可以接受这个并进行自己的解析。
谢谢!
【问题讨论】:
-
你是如何传递的,你发送到批处理文件的内容到底是什么,被评估为
%1?我也很怀疑你的意图是真的echo它,那么你对那个输入参数做了什么? -
@Compo
echo "%1"以批处理文件为例。它在 cmd 中调用它,例如my-file.bat ^1.1。我想以某种方式在批处理文件中使用插入符号获取^1.1,但%1包含1.1而不是^1.1。我意识到这是因为^是一个转义字符。 -
当你说你在 cmd 中调用它时,这是否意味着你打开了一个
cmd.exe窗口,my-file.bat的目录作为你的当前目录,你在物理上输入 @ 987654340@ 并按下[ENTER]键?我还问您打算对输入参数做什么。我问是因为你刚刚输入了它,所以应该已经知道你输入了什么。您一定是在用它执行其他任务! -
@Compo
my-file.bat是cmd.exe窗口的当前目录中包含文本echo "%1"的文件。我正在输入my-file.bat ^1.1并按回车键。输出是1.1,但我想要的输出是^1.1。是的,为了这个问题,我只是将问题简化为一个非常简单的例子。我想以某种方式将^1.1的输入批量存储在一个变量中,然后我会用它做其他事情。 -
我不想要这个简化的例子,因为没有人会在现实世界的批处理脚本中做你正在做的事情。您显然打算将参数用于
echo以外的其他内容,攻击此问题的最佳方法是其中的一部分,而不是仅仅在其中粘贴不需要的echo并希望得到满足的答案脚本的真正目的。
标签: batch-file cmd