【发布时间】:2014-04-17 15:33:33
【问题描述】:
这是使用 wmic.exe 打印包含不同系统信息的文本的批处理的一部分。在我使用调用和标签为硬盘信息制作自动参数的一部分中,我必须在参数中使用参数才能使其工作。这仅适用于启用延迟扩展。因此,在 for /f 循环中,包含回显以归档正在回显并具有延迟扩展的行的代码,在扩展结束后直接回显换行符!我不知道为什么或如何解决这个问题。我已经下定决心用批处理来做这件事,是的,我知道在 vbs 脚本中使用 wmi 更容易做到这一点。任何帮助都非常感谢
@echo off
for /f "skip=2 delims=" %%a in ('wmic diskdrive get medialoaded') do call :getdisk
for /f "skip=2 delims=" %%a in ('wmic diskdrive get medialoaded') do call :setdisk
>%tmp%\t.x echo wscript.echo round^(wscript.arguments^(0^) / ^(1024 * 1024 * 1024^), 1^)
for /f "skip=2 delims=" %%a in ('wmic diskdrive get medialoaded') do call :numdisk
goto:eof
:getdisk
set /a disk=%disk%+1
goto:eof
:setdisk
if not defined numreset set /a numreset=%disk%-1
if not defined num (set num=0) else (set /a num=%num%+1)
for /f "tokens=1-10 delims==" %%a in ('wmic diskdrive %num% get interfacetype^,model^,size /format:list') do set %%a%num%=%%b
if "%num%"=="%numreset%" set "num="
goto:eof
:numdisk
if not defined num (set num=0) else (set /a num=%num%+1)
set /a hdd=%num%+1
setlocal enabledelayedexpansion
set interfacetype=interfacetype%num%
set mediatype=mediatype%num%
set size=size%num%
if "%disk%" geq "%num%" >>hdd.txt echo HDD %hdd%: index %num%
if "%disk%" geq "%num%" >>hdd.txt echo InterFace: !%interfacetype%!
if "%disk%" geq "%num%" >>hdd.txt echo MediaType: !%mediatype%!
if "%disk%" geq "%num%" for /f %%a in ('cscript //nologo //e:vbscript %tmp%\t.x "!%size%!"') do set sizegb=%%a
if "%disk%" geq "%num%" >>hdd.txt echo Size: !%size%! b ^(%sizegb% gb^)
if "%disk%" geq "%num%" >>hdd.txt echo.
endlocal
goto:eof
解决方法:
由于换行符位于扩展变量中,因此很容易将其删除:
::before:
!%var%!
::after:
!%var%:~0,-1!
【问题讨论】:
-
这可能会有所帮助:stackoverflow.com/a/23067935/2152082
-
它帮助我了解了一些我不知道的 wmic 命令。我会用其他地方。谢谢。但我的问题中的问题是由其他原因引起的。当编号参数首次设置在 ':setdisk' 标签下时,没有额外的换行符或来自 wmic 的其他数据设置给它们。在 !%variable%! 的扩展过程中添加了换行符在文件的回声中。
-
更正:换行符确实在扩展变量的内部。毕竟你可能正在做某事!但是当我在本地内存之外回显并启用延迟扩展为 %variable% 时,新行没有被回显注册..
标签: windows batch-file