gpt4 book ai didi

batch-file - WMIC 返回奇数序列号

转载 作者:行者123 更新时间:2023-12-03 13:58:25 28 4
gpt4 key购买 nike

我有一个奇怪的问题。我试图将硬盘序列号从 WMIC 返回到批处理文件中的变量;给我变量的那一行是:

for /f "skip=2 tokens=2 delims=," %%a in ('wmic diskdrive get serialnumber /FORMAT:CSV') do (set harddisk=%%a)

这将 wmic 视为硬盘驱动器的序列号分配给一个变量,问题是它返回的序列号略微偏离。在一个示例中,它返回:

3ZVT01H4

但是标签上的序列号是:

Z3TV104H

似乎它正在取实际的序列号并每两个字符反转一次;我打错了什么还是这是一个已知的(但没有记录在任何地方)问题?

有没有办法可以将变量拆分为两个字符块,颠倒所有这些字符的顺序,然后将其放入变量中?

最佳答案

-- 好像是取了实际的序列号,每两个字符颠倒一次;我打错了什么还是这是一个已知的(但没有记录在任何地方)问题?

我能想到的最好的方法是 apparently a bug .我的字符也是成对反转的,而且不仅限于 wmic。如果我 SELECT SerialNumber FROM Win32_DiskDrive,结果相同来自 winmgmts:\\localhost\root\cimv2在WSH。

-- 有没有办法可以将变量拆分为两个字符块,颠倒所有这些字符的顺序,然后将其放入一个变量中?

如果你安装了 PowerShell,你可以使用 regexp replace 来做到这一点。 .这是一个调用 PowerShell 命令来演示的批处理脚本:

@echo off
setlocal

for /f "tokens=*" %%I in ('wmic diskdrive get serialnumber ^| findstr "[0-9]"') do (

echo reversed: %%I

for /f "tokens=*" %%x in ('powershell -command "'%%I' -replace '(.)(.)','$2$1'"') do (
set "serial=%%x"
)
)

echo corrected: %serial%

goto :EOF

我想这符合 duck punch . :)

实际上,如果您只想查看串行而不设置变量,则可以使用 PowerShell one-liner 执行此操作:

powershell "gwmi win32_diskdrive | %{ $_.serialnumber -replace '(.)(.)','$2$1' }"

关于batch-file - WMIC 返回奇数序列号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27297348/

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