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

2024-01-15

Summary:
从命令行(在 Windows Server 2003 R2 上),我键入:

> SET password=a^b  
> ECHO %password%

结果是“ab”。奇怪的插入符 (^) 去哪儿了?然后我尝试用 ^^、`^、%^、^^^ 来“转义”它,但这些都没有使插入符号传递到 echo 命令。这个批处理文件位于中间。因此,我既无法更改源系统的密码以避免使用插入符号,也无法更改目标系统的密码以使其与源系统不同步。

Details:
我搜索了谷歌,然后就这样了。虽然我现在有无数关于如何更好地设计我该死的 Windows 批处理文件的技巧,但我的问题仍然存在。

我有一个名为 run.bat 的批处理文件,它由一系列设置运行 Java 命令行应用程序的上下文的 SET 语句组成。 “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"

即我得到插入符号,但引号现在出现在字符串的内容中......这自然不适用于它们传递到的应用程序。

有没有人有一个明显的提示或技巧,我错过了将命令行上作为参数输入的内容通过未触及的方式传递到我的内部使用?该值实际上已到达 %2 的批处理文件变量中。但是,当我第一次看到 %2 的内容时,它已经“解除锁定”了。

呃,我不喜欢 Windows 批处理文件。

Update:
非常感谢约书亚·麦金农的回应。我选择他作为答案,因为它解决了我眼前的问题。但是,我想进一步详细说明解决方案(是的,复数)。

  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  

or

> run mr_clean "puke^^boy"  

最终执行的语句将如下所示:

java MyClass username=mr_clean password=puke^boy  

希望这可以帮助其他人节省一些时间。我花了 6 个小时的时间试图找出这种特质(更像是白痴同步性)。


根据这一页 http://www.phipster.com/2008/12/using-caret-in-windows-batch-files.html, & | ( ^都是Windows批处理文件中的保留字符。 ^ 是转义字符,也是行继续字符。 ^^ 应该给你一个 ^,但是 ^ 可能需要转义。

要通过输入获得密码,您是否尝试过将插入符的数量增加四倍?

e.g.:  my_batch.cmd the_pass^^^^word
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 最后一个参数中的正斜杠会导致批处理文件目录(“%~dp0”)的路径发生更改

    我正在学习如何在批处理脚本中使用参数 并最终创建了某种用于读取参数和设置参数的模板 echo off SetLocal EnableDelayedExpansion set needextra set errstat set noflag
  • 在 Docker 中启动 tomcat 时无法在端口 8080 上打开网页

    在我的本地计算机 Windows 10 64 位 上 我启动 docker Toolbox 然后我拉取 Tomcat 映像并运行它 如下所示 docker run it tomcat 就跑成功了 31 Dec 2019 17 54 27 5
  • 强制窗口在打开时获得焦点

    我有一个 WPF 应用程序 它通过套接字连接与 C MFC 应用程序进行通信 如果用户按下 C 应用程序中的特定按钮 则会显示一个新的 WPF 窗口 以下是调用以启动 WPF 窗口的代码 var window new Window wind
  • 如何调用 LogonUser() 来获取启用了 UAC 的 Windows 服务中的非限制完整令牌?

    我正在 Windows Server 2012 上运行 WindowsService 它需要模拟域管理员用户 该用户也被添加到计算机上的本地管理员组 系统上启用了 UAC 并且使用 LogonType 为 LOGON32 LOGON INT
  • C++串口问题

    我在 Visual Studio 上使用 C 连接到任何串行端口 想要与 Arduino 交换 时遇到问题 我正在使用串行类 http www arduino cc playground Interfacing CPPWindows在 Ar
  • 获取已创建进程的进程句柄 Windows

    我需要获取运行程序时刚刚创建的所有进程的句柄或 PID 到目前为止 我已经使用了这段代码 每次创建进程时都会告诉我 问题是我只获取有关创建的进程的信息 但没有有关进程本身的任何信息 https msdn microsoft com en u
  • 在新窗口中打开 SAS 程序

    目前 当您在 Windows 中双击 SAS 文件时 它将在您已打开的现有 SAS 会话中打开它 有没有办法让它在窗口中单击时会启动一个新的 SAS 窗口 据我所知 SAS 是一个所谓的 单实例 应用程序 因此它的默认行为是在现有会话中打开
  • 在 Jenkins 中执行批处理文件

    我有一个简单的批处理文件 我想要从 Jenkins 调用 运行 执行该文件 Jenkins 中有同样的插件吗 如何从 Jenkins 执行批处理文件 如果有相同的教程或文档 无需为此添加新插件 在Jenkins 选择您的工作名称并转到配置部
  • 如何通过 DOS 批处理命令发送电子邮件?

    我在 DOS 中有一个批处理文件 可以进行一些检查 完成后我需要发送一封电子邮件 我在 interwebz 上找到了一些解决方案 但大多数都是第三方的 或者只是在 Outlook 中打开新邮件 我需要命令来发送完整的电子邮件 而无需任何人工
  • Python 无法在 git bash 命令行中工作

    Python 不会在 git bash Windows 中运行 当我在命令行中输入 python 时 它会将我带到一个空行 而不会像在 Powershell 中一样显示它已输入 python 2 7 10 它没有给我错误消息 但 pytho
  • .bat 文件将文件排序到文件夹中

    对于我的图片集 我希望文件夹中的所有图片按日期自动分类到文件夹中 幸运的是 这些文件已经以时间戳命名 2012 07 15 12 21 06 jpg 2012 07 15 12 21 26 jpg 2012 07 16 12 12 50 j
  • 如何从任何进程关闭 Windows 上的套接字(ipv4 和 ipv6)连接?

    如何在 Windows 上关闭 tcp v4 和 tcp v6 连接 我不想终止具有开放连接的整个进程 因为这显然会将其他人踢出该进程 我需要从一个单独的进程执行此操作 因此无法访问套接字句柄等 我正在使用 Windows API 来获取
  • 在OpenCV中将YUV转换为BGR或RGB

    我有一个电视采集卡 其输入内容为 YUV 格式 我在这里看到了与此问题类似的其他帖子 并尝试尝试所述的所有可能的方法 但它们都没有提供清晰的图像 目前最好的结果是 OpenCVcvCvtColor scr dst CV YUV2BGR 函数
  • 更改desktop.ini不会在Windows中自动更新文件夹图标

    我使用此批处理脚本将所有文件夹和子文件夹的图标更改为位于文件夹中的 ico 文件 但是 资源管理器中的文件夹图标不会改变除非我手动重命名desktop ini将资源管理器中的文件更改为其他内容 然后返回desktop ini或者例如将字母更
  • Windows 上的 Openssl 错误 0x02001005 和 0x2006D002?

    我正在尝试使用 openssl 将 cer 证书转换为 p12 证书 这是我正在使用的命令 C OpenSSL Win32 bin gt openssl x509 inform der in developer identity cer o
  • python+win32:检测窗口拖动

    有没有办法检测何时使用 python pywin32 在窗口中拖动不属于我的应用程序的窗口 我想对其进行设置 以便当我拖动标题与桌面边缘附近的图案匹配的窗口时 当松开鼠标时它会捕捉到边缘 我可以编写代码 以便在释放鼠标时将所有具有该标题的窗
  • 更改 mingw' 启动目录或创建 mingw 符号链接

    设置 mingw 控制台启动目录的最简单方法是什么 我只使用 mingw 进行编译 但由于缺乏编辑器甚至符号链接 我很困惑如何告诉 mingw 控制台出现在不同的目录而不是常规的主目录中 如果有人知道如何像 cygwin 那样将 真正的 符
  • 访问图像的 Windows“标签”元数据字段

    我正在尝试进行一些图像处理 所以现在我正在尝试读取图像 exif 数据 有 2 个内置函数可用于读取图像的 exif 数据 问题是我想读取图像标签 exifread and imfinfo这两个函数都不显示图像标签 Is there any
  • 在 Cygwin 软件包列表中找不到 Openssl

    这里说的是https github com joyent node wiki Building node js on Cygwin Windows https github com joyent node wiki Building nod
  • Qt 支持 Windows 蓝牙 API 吗?

    谁能告诉我 Qt 是否支持 Windows 蓝牙 API 如果是这样 您能否分享一些有关如何使用它的信息 自上次答复以来 这个问题的答案发生了一些变化 Qt 5 2 版为 Linux BlueZ 和 BlackBerry 设备实现了蓝牙 A

随机推荐