似乎无法将文件中的base64字符串批量用于变量

时间:2019-03-29 15:25:20

标签: powershell batch-file

我在将base64字符串从文本文件解析为批处理变量时遇到问题

我有一个脚本,该脚本使用批处理为XML生成应用程序的配置,我使XML生成良好。问题是,在我生成的XML中,有一些base64使用需要修改的变量对更多XML进行编码。头痛半。 (有问题的应用程序需要这样做,否则会破坏配置)

我有一个XML,需要将XML编码为文本文件中的base64字符串,但是我需要将该文本文件加载到变量中,但是我认为字符串破坏了该变量。

它生成的base64是这样的:

PD94bWwgdmVyc2lvbj0iMS4wIj8+DQo8QXJyYXlPZlN5c3RlbVZhcmlhYmxlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPg0KPFN5c3RlbVZhcmlhYmxlPg0KPElEPiVVU0VSTkFNRSU8L0lEPg0KPFZhbHVlPmxlZ2FsaXQ8L1ZhbHVlPg0KPFJlYWRPbmx5PnRydWU8L1JlYWRPbmx5Pg0KPFR5cGU+U3RyaW5nPC9UeXBlPg0KPC9TeXN0ZW1WYXJpYWJsZT4NCjxTeXN0ZW1WYXJpYWJsZT4NCjxJRD4lTE9HT05fVVNFUk5BTUUlPC9JRD4NCjxSZWFkT25seT50cnVlPC9SZWFkT25seT4NCjxWYWx1ZT5sZWdhbGl0PC9WYWx1ZT4NCjxUeXBlPlN0cmluZzwvVHlwZT4NCjwvU3lzdGVtVmFyaWFibGU+DQo8U3lzdGVtVmFyaWFibGU+DQo8SUQ+JVNFX0xPQ0FMX1RFTVAlPC9JRD4NCjxWYWx1ZT5DOlxVc2Vyc1xsZWdhbGl0XEFwcERhdGFcTG9jYWxcVGVtcFwyXDwvVmFsdWU+DQo8UmVhZE9ubHk+dHJ1ZTwvUmVhZE9ubHk+DQo8VHlwZT5QYXRoPC9UeXBlPg0KPC9TeXN0ZW1WYXJpYWJsZT4NCjxTeXN0ZW1WYXJpYWJsZT4NCjxJRD4lU0VfTE9DQUxfRElDVF9ST09UJTwvSUQ+DQo8VmFsdWU+QzpcVXNlcnNcbGVnYWxpdFxEb2N1bWVudHNcU3BlZWNoRXhlY1w8L1ZhbHVlPg0KPFJlYWRPbmx5PnRydWU8L1JlYWRPbmx5Pg0KPFR5cGU+UGF0aDwvVHlwZT4NCjwvU3lzdGVtVmFyaWFibGU+DQo8U3lzdGVtVmFyaWFibGU+DQo8SUQ+JVNFX0NFTlRSQUxfRElDVF9ST09UJTwvSUQ+DQo8VmFsdWU+XFxMSVQtU0VSVkVSXFBoaWxpcHNfU0VfRW50ZXJwcmlzZVxDZW50cmFsX0RpY3RhdGlvbjwvVmFsdWU+DQo8UmVhZE9ubHk+ZmFsc2U8L1JlYWRPbmx5Pg0KPFR5cGU+UGF0aDwvVHlwZT4NCjwvU3lzdGVtVmFyaWFibGU+DQo8L0FycmF5T2ZTeXN0ZW1WYXJpYWJsZT4NCg==
for /f "tokens=*" %%c in (%~dp0\base.txt) do (
set base=%%c
)
echo %base%

我正在使用上面的for循环将文件加载到变量中,但是在回显时我没有任何输出,因为它出于某种原因似乎没有设置变量。使用此方法我将其他文本文件加载到变量中。

2 个答案:

答案 0 :(得分:0)

TL; DR-

这是WinXp之前的系统吗?

详细信息:

是不是很长的base64,还是您很高兴见到我? :-)

首先,我想知道行的长度。但是任何WinXp +都可以处理8k个字符,因此示例中的7,664应该不是问题。

所以我想知道加引号和双引号外的反斜杠。但是,在我的测试中,缺少dbl引号不是问题。效果很好:

--CMD:--
for /f %A in (c:\temp\z.txt) do @set zLongTmp=%A
--OUTPUT:--
...a 7,664 char output...

所以我检查了字符串,只发现了[A-Z0-9 + /] ....所以没有什么异常

我做了其他测试,但都成功了。我只是想知道这是否是WinXp之前的系统,其cmdline最多为2047个字符。如果不是那样,我仍然建议在'set'命令周围使用双引号。

示例:

for /f %A in (c:\temp\z.txt) do @set "zLongTmp=%A"
echo %A

答案 1 :(得分:0)

我遇到的主要问题是我试图加载的文件,因为变量是用UCS-2 LE BOM编码的。我必须确保该文件使用UTF 8编码,而没有BOM,并且所有文件都能按要求工作。

感谢所有帮助解决此问题的人。