gpt4 book ai didi

windows - 如何获取包含插入符号 (^) 的密码,将其作为参数原封不动地传递给 Windows 批处理文件?

转载 作者:可可西里 更新时间:2023-11-01 12:35:12 26 4
gpt4 key购买 nike

总结:
从命令行(在 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 的回复。我选择他作为答案,因为它解决了我眼前的问题。但是,我想进一步详细说明解决方案(是的,复数)。

  1. 无需使用任何形式的SetLocal/EndLocal
  2. 必须使用 %~1 风格的语法 - 没有发现任何形式的 %1 语法可以保留插入符
  3. 解决方案:不加引号,使用 4 个连续的插入符(例如:使用 pass^^^^word 生成 pass^word)
  4. 解决方案:引用,使用 2 个连续的插入符(例如:使用“pass^^word”生成 pass^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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com