【问题标题】:Capturing the result of a command for later use捕获命令的结果以供以后使用
【发布时间】:2020-10-12 19:05:17
【问题描述】:

我正在运行一个批处理脚本并将信息输出到临时文件夹中的一个文件中,(只是为了学习)。

我有一个输入供用户选择他们希望从哪个映射驱动器中传输数据。

这是我所拥有的,它非常简单,所以我可以学习然后修改。

Cls
@ECHO Off
Net use > c:\Temp\Map.txt
Net Use
Pause
:Start

ECHO Which Drive letter do you want to back up?
ECHO ? - Enter Drive letter
ECHO E - Exit
SET /P M=Make Choice then press ENTER:
IF %M%==E Exit Else goto :here
If %M%==e Exit Else goto :here

:Here
Echo %M%
Findstr "OK           %M%:" c:\Temp\Map.txt
pause

我需要提取他们选择的驱动器的路径名。就像如果有 5 个驱动器,并且他们想要备份驱动器 S:,输出是:

OK           S:        \\10.X.X.X\Deployment\David\Davids_Scripts\bats

我需要保存 \\10.52.8.1\Deployment\David\Davids_Scripts\bats,以便将其放入传输脚本中。

【问题讨论】:

  • 好吧,对于 unix 系统,我会使用“sed”命令。不知道微软。
  • 我建议您在for-loop%SystemRoot%\System32\wbem\WMIC.exe" Path Win32_MappedLogicalDisk Get DeviceID,ProviderPath 中使用此命令,而不是使用net use,并捕获其输出。它也应该在它们各自的网络路径旁边列出所有映射的驱动器号。
  • if 的一些小改进:使用/i 开关进行不区分大小写的比较,引用双方以避免空输入的语法错误:if /i "%M%" == "E" goto :eof

标签: windows batch-file variables


【解决方案1】:

正如 Compo 已经评论的那样,wmicnet use 更好(主要是因为您不能依赖一致的令牌计数 *),这使得使用 for 循环处理变得困难。 Wmicnet use 慢一点,但好处是值得浪费时间。

@echo off
setlocal
set "M=Q:"
for /f "delims=" %%a in ('wmic netuse where LocalName^="%M%" get RemoteName^,Status /value ^|find "=" ') do set "%%a"
echo your drive is %RemoteName% and it's Status is %Status%.

要列出您的网络驱动器,您还可以使用:

wmic netuse where LocalName="Q:" get  localname,remotename,status

*) net use 取决于语言,英语中的“Unavailable”(一个标记)在德语中是“Nicht verfgb”(两个标记)。
即使在同一种语言中,您也不能依赖:(德语示例):“Verbunden”(一个标记)与“Nicht verfgb”(两个标记)

【讨论】:

    猜你喜欢
    • 2014-12-24
    • 1970-01-01
    • 2011-05-06
    • 2016-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    相关资源
    最近更新 更多