使用Windows命令行将多行环境变量回显到文本文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Windows命令行将多行环境变量回显到文本文件相关的知识,希望对你有一定的参考价值。

我有一个环境变量%SSH_PRIVATE_KEY%,并希望使用命令行将其打印到文件,而不使用批处理文件。这是因为我需要在Gitlab-Ci .yml脚本中使用此文件。

在Linux中,这很简单:

echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa 

这会产生:

-----BEGIN RSA PRIVATE KEY-----
DHHDpgIFFFFAQEA4s5JARKOiF/dfherreh/qeGLNaryra7rt927okJmonpJHyCbA5SRyjsST/oC
tJx+YJ0BaNbbHtpbjbMeWgqKPXNAIRng30TXCOLLKverteygerg/ererg/GVFfd5T1v/qY2rGCN
v9yHSw89upy8pA+HvAFFFFHDb2YUAgpyYMqCcZ3vGY0/NDBxQQwDKwrefqwef/wefweqe/wwALb 

等等。

但是在Windows中,如果我尝试:

echo "%SSH_PRIVATE_KEY%" >  C:
unneruilds66092d15myproject.sshid_rsa

它生成此输出:

"-----BEGIN RSA PRIVATE KEY-----

因为一旦它到达%SSH_PRIVATE_KEY%中的换行符,它就会逃脱echo命令。

如何使用Windows命令行将完整的%SSH_PRIVATE_KEY%打印到文件中?

答案

要获得所有的线路使用echo !VARIABLENAME!

echo !SSH_PRIVATE_KEY! >  C:
unneruilds66092d15myproject.sshid_rsa
另一答案

实际上Blue7是对的,但是当他/她被投票时,对于那些没有读过这个gitlab-ci的人来说,这是一个很长的答案:

为了!工作DelayedExpansion必须启用,它似乎只在批处理文件中工作。在gitlab中,这是默认情况。默认情况下,cmd将首先展开环境变量,然后解释它。因此,当你写echo "%SSH_PRIVATE_KEY%" cmd实际看到

echo "-----BEGIN RSA PRIVATE KEY-----
DHHDpgIFFFFAQEA4s5JARKOiF/dfherreh/qeGLNaryra7rt927okJmonpJHyCbA5SRyjsST/oC
...

是的,包括"!为避免这种情况,您需要启用后期扩展setlocal EnableDelayedExpansion。通过延迟扩展,环境变量在传递给应用程序之前就会被扩展。因此,也没有必要使用"。搜索EnableDelayedExpansion将为您提供许多其他信息。

以上是关于使用Windows命令行将多行环境变量回显到文本文件的主要内容,如果未能解决你的问题,请参考以下文章

批次 |将多个变量回显到文件

for循环中的多个do命令:将字符串回显到文件然后重定向到命令窗口

表单提交后将 PHP 变量回显到 HTML [重复]

在批处理脚本中回显到多个文件

将变量内容回显到文本文件中的批处理脚本[重复]

在 Python 中禁用 subprocess.Popen 回显到命令提示符窗口标题