windows - 如何将以 "!"结尾的参数传递给另一个bat文件?

标签 windows batch-file parameters cmd parameter-passing

我有两个 bat 文件,我需要将三个参数从一个 bat 文件传递​​到另一个。但是,如果参数以“!”结尾未收到参数

调用者.bat

impl.bat param1 param2! param3

impl.bat

echo %1
echo %2
echo %3
运行 caller.bat 后的

预期结果:

param1
param2!
param3
运行 caller.bat 后的

实际结果:

param1
param2
param3

任何人都可以帮助我如何实现实际结果吗?

最佳答案

正如其他答案所说,可以禁用延迟扩展,但没有必要显示感叹号。

将感叹号(和其他特殊字符)放入变量中很重要。
然后你可以完美地使用它延迟扩展

示例

@echo off
set "param1=%~1"
set "param2=%~2"
setlocal EnableDelayedExpansion
echo Works: !param1! !param2!
echo FAILS: %param1% %param2%

调用
myBatch.bat arg1! "arg2!<>&"

延迟扩展的优点是可以处理任何内容而没有副作用,因为扩展的内容将不再被解析。
在许多情况下,百分比扩展会失败,因为内容也会针对特殊字符进行解析

关于windows - 如何将以 "!"结尾的参数传递给另一个bat文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30363385/

相关文章:

MySQL UDF : keep the allocated memory?

c# - 使用带有约束的 C# 模拟批处理文件

显示默认值的 powershell 强制参数

batch-file - 将批处理文件与Cmd.exe重新关联

batch-file - 批处理文件 - 检查 %2 是否存在,如果不存在则将其设置为 0

parameters - rerenderEvents/refetchEvents 问题

ruby-on-rails - Rails 路由过滤器,参数不存在

java - 虚假唤醒在实践中发生

c# - 从提升的进程 C# 在非提升的浏览器中打开网页

c++ - ShowCursor(FALSE) 不在控制台应用程序上隐藏光标