摘要:从命令行(在 Windows Server 2003 R2 上),我输入:> SET password=a^b> ECHO %password%结果是“ab”。那个奇怪的插入符号 (^) 去哪儿了?然后我试图用 ^^、`^、%^、^^^ 来“转义”它,但这些都没有让插入符号传递到 echo 命令。这个批处理文件在中间。因此,我既不能更改源系统的密码以避免使用插入符号,也不能将目标系统的密码更改为与源系统不同步。 详情:我搜索了谷歌,然后搜索了。虽然我现在有无数关于如何更好地设计我该死的 Windows 批处理文件的技巧,但我的问题仍然存在。我有一个名为 run.bat 的批处理文件,它由一系列 SET 语句组成,用于设置运行 Java 命令行应用程序的上下文。在“cd”到正确的文件夹后,在命令行(在 Windows Server 2003 R2 上)的提示下,我输入:> run the_name the_pass^word当我查看回显到命令行的输出时,我看到“java...config.user_name=the_name config.password=the_password”,其中 ... 是一堆与此问题无关的参数和库噪声。血腥的插入符号 (^) 消失了。我已经尝试了我能找到的各种逃避策略,试图让插入符号出现。我找不到任何会导致插入符号出现的东西......除了用引号包围密码,就像我输入的那样:> run the_name "the_pass^word"...然后生成的命令行如下所示:java...config.user_name=the_name config.password="the_pass^word"即我得到了插入符号,但引号现在出现在字符串的内容中......这自然不适用于它们被传递到的应用程序。有没有人有一个明显的提示或技巧,我错过了将命令行上作为参数输入的内容通过 UNTOUCHED 传递给我的内部使用?该值实际上是到达 %2 的批处理文件变量中。但是,当我第一次看到 %2 的内容时,它已经“解除了”。呃,我不喜欢 Windows 批处理文件。 更新:非常感谢 Joshua McKinnon 的回应。我选择他作为答案,因为它解决了我眼前的问题。但是,我想进一步详细说明解决方案(是的,复数)。 无需使用任何形式的 SetLocal/EndLocal 必须使用 %~1 样式语法 - 没有找到可以保留插入符号 的 %1 语法形式 解决方案:不加引号,使用4个连续的插入符号(例如:使用pass^^^^word产生pass^word) 解决方案:引用,使用2个连续的插入符号(例如:使用“pass^^word”产生密码^word) 在批处理文件“run.bat”中,使用 %~1 语法,如下所示:java MyClass username=%~1 password=%~2...然后在命令行中输入:> run mr_clean puke^^^^boy要么> run mr_clean "puke^^boy"这将导致最终执行的语句如下所示:java MyClass username=mr_clean password=puke^boy希望这有助于其他人节省一些时间。我结束了 6 个小时的切线试图追捕这种特质(更像是白痴同步)。 最佳答案 根据 this page , & | ( ^ 都是 Windows 批处理文件中的保留字符。^ 是转义字符,也是换行符。^^ 应该给你一个 ^,但 ^ 可能需要转义。要通过输入获取密码,您是否尝试将插入符号的数量增加四倍?e.g.: my_batch.cmd the_pass^^^^word关于windows - 如何获取包含插入符号 (^) 的密码,该密码未更改作为参数传递给 Windows 批处理文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5254460/
10-13 03:21