如何一次读取一个字符的字符串或文件并将该字符的 ASCII 值分配给 CMD 批处理中的变量? [复制]

Posted

技术标签:

【中文标题】如何一次读取一个字符的字符串或文件并将该字符的 ASCII 值分配给 CMD 批处理中的变量? [复制]【英文标题】:How can I read a string or a file one character at a time and assign the ASCII value of that character to a variable in CMD batch? [duplicate] 【发布时间】:2021-05-25 05:21:17 【问题描述】:

我正在尝试解析 WMIC 命令的输出,但我注意到,当我将输出重定向到文件时,该字符串以一个可读字符和一个 NUL 字符(根据十六进制编辑器为 0x00)进入,使输出无法用于我的目的。

我想通过一次读取一个字符来解析这个 WMIC 输出并丢弃不可读的字符,最后将字符串重建为连续字符,它们之间没有奇怪的空格。

如何在 DOS(实际上是 win-7 下的 CMD 提示符)批处理文件中完成此操作?

我的命令

wmic process where processID=12345 get commandLine

定向到文件的输出如下所示

 _C o m m a n d L i n e
 n o t e p a d     q . b a t

我希望它看起来像

 _Command Line
 notepad    q.bat

我不知道我怎么能做到这一点,所以我什至不会假装我在做什么。我的批处理编程技能几乎不存在。

【问题讨论】:

wmic process where processID=12345 get commandLine | more 这能回答你的问题吗? Text garble in batch script for wmic command。如果您搜索 WMIC 的 batch-file 标签,我也可以链接到其他几个问题。 如果我让它进入CMD提示窗口,我看不到0x00字符,它显示正常。我需要将此输出分配给变量,而我知道如何以最简单的形式执行此操作的唯一方法是将其写入文件并使用“read /p variable= 【参考方案1】:

您可以通过管道使用 MORE 命令来输出文件。这将摆脱 Unicode 格式并将其更改为 ANSI。

但是使用FOR /F 命令捕获WMIC 输出的输出同样容易。

@echo off
for /F "usebackq tokens=1,2 delims==" %%G IN (`"wmic process where processID=16832 get commandLine /format:value |Findstr ."`) do set "%%~G=%%~H"
echo Command Line:%commandLine%
pause

【讨论】:

【参考方案2】:

在搜索更多类似问题时,我在尝试修改这些答案以达到我的目的时偶然发现了一个答案。这可能并不适用于所有人,而是使用

wmic process where processID=12345 get commandLine > out.txt

使用

wmic /OUTPUT:"out.txt" process where processID=12345 get commandLine

你没有得到 Uniocde 字符并最终得到 ANSI 输出,这正是我所需要的。

【讨论】:

我仍然使用 /OUTPUT 选项获得带有 BOM 的 UTF-16。

以上是关于如何一次读取一个字符的字符串或文件并将该字符的 ASCII 值分配给 CMD 批处理中的变量? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何读取 UTF-16 文件并将其内容与使用十六进制值定义的 wchar_t* 字符串文字进行比较

如何读取文本文件键值并将值分配给字符串 var?

linux如何使用grep ,wc -l命令统计一个文件中的多个字符串的个数,并且只读取1次文件。

从 excel 表中读取并将确切的字符写入 json 文件

文件读和写的操作及区别

读取 .txt 文件并将每一行放入向量中