【问题标题】:Batch for loop using wmic使用 wmic 进行批处理循环
【发布时间】:2014-11-27 13:51:00
【问题描述】:

下面的输出

wmic logicaldisk get providername /value

在我正在使用的计算机上使用 cmd(用户权限有限)是:

ProviderName=


ProviderName=


ProviderName=\\xxx-SN-NA01\Users2\N\ni


ProviderName=\\xxx-sn-na01\Software_Ca


ProviderName=\\xxx-sn-na01\TSO

我正在尝试访问存储在名为 %drives_paths_wmic% 的变量中的以下内容:

\\xxx-SN-NA01\Users2\N\ni \\xxx-sn-na01\Software_Ca \\xxx-sn-na01\TSO

然后将 this 的内容传输到变量 %file% 中。

我目前拥有的批处理代码是:

@echo off
setlocal enabledelayedexpansion 
for /F "tokens=2 delims='='" %%A in ('wmic logicaldisk get providername /value') do (
  echo %%A >> %drive_paths_Wmic%
)
echo %drive_paths_Wmic%
echo %drive_paths_Wmic% >> %file%

编辑:问题是 %drive_paths_Wmic% 变量中没有存储任何内容。

由于批处理文件需要在 Windows 7 和 XP 计算机上运行,​​因此我无法使用 PowerShell。 请建议更改批处理代码以执行此操作?

【问题讨论】:

    标签: variables batch-file for-loop cmd wmic


    【解决方案1】:

    您没有指定问题。然而:

    '1'。 delims==语法

    for /F "tokens=2 delims==" %%A in ('wmic logicaldisk get providername /value') do @echo %%A
    

    上述命令的输出是否正确?我不敢说,因为

    '2'。 wmic 的所有输出都是 Unicode。要转换为 ASCII,请尝试下一个代码 sn-p:

    wmic logicaldisk get providername /value >somename.txt
    for /F "tokens=2 delims==" %%A in ('type somename.txt') do @echo %%A
    

    '3'。结果到变量:

    set "file=" 
    rem variable initialized now
    rem ... some code ...
    for /F "tokens=2 delims==" %%A in ('type somename.txt') do set file=!file! %%A
    rem ... some code ...
    echo !file!
    echo %file%
    

    也可以是set "file=!file! %%A"

    整批:

    @ECHO OFF >NUL
    @SETLOCAL enableextensions enabledelayedexpansion
    set "drive_paths_Wmic=" 
    rem variable initialized now
    rem ... some code ...
    wmic logicaldisk get providername /value >somename.txt
    for /F "tokens=2 delims==" %%A in ('type somename.txt') do (
      set drive_paths_Wmic=!drive_paths_Wmic! %%A
      @rem ... some code ...
      )
    echo !drive_paths_Wmic!
    echo %drive_paths_Wmic%
    Endlocal
    goto :eof
    

    输出(在我的电脑上):

    C:\bat>fivmic
     \\pc1870a\ttemp \\PC1870A\Install
     \\pc1870a\ttemp \\PC1870A\Install
    

    输出(与echo ON 部分)

    C:\bat>fivmic
    C:\bat>wmic logicaldisk get providername /value  1>somename.txt
    C:\bat>for /F "tokens=2 delims==" %A in ('type somename.txt') do set drive_paths_Wmic=!drive_paths_Wmic! %A
    C:\bat>set drive_paths_Wmic=!drive_paths_Wmic! \\pc1870a\ttemp
    C:\bat>set drive_paths_Wmic=!drive_paths_Wmic! \\PC1870A\Install
    C:\bat>rem ... some code ...
    C:\bat>echo !drive_paths_Wmic!
     \\pc1870a\ttemp \\PC1870A\Install
    C:\bat>echo  \\pc1870a\ttemp \\PC1870A\Install
     \\pc1870a\ttemp \\PC1870A\Install
    

    如果%file% 变量包含有效的文件名,那么您可以将回显重定向到该文件,例如echo bubu >> anyname.txt 将文本 bubu(在新行上)附加到文件 anyname.txt。在您的脚本中:

    set file="anyname.txt"
    echo %drive_paths_Wmic% >> %file%
    

    【讨论】:

    • 好的,我已经编辑了问题以包含问题。我会尝试这些建议并让您知道结果。
    • 我现在已经在“完整批次”中使用了您的代码。 “somename.txt”文件被创建并被填充,但是当尝试运行 for /f ... 循环行时程序退出。这应该如何改变?
    • 试试set ECHO ON。错误信息?最后 ECHO 行是哪一行?
    • @echo on 回显的最后一行是:wmic logicaldisk get providername /value >somename.txt cmd 窗口中没有错误消息。
    • 请更新您的问题并将关键代码 sn-p 粘贴到那里
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    • 2023-03-27
    相关资源
    最近更新 更多