首页 > 解决方案 > 捕获命令的结果以供以后使用

问题描述

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

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

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

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保存的,所以我可以把它放在传输脚本中。

标签: windowsbatch-filevariables

解决方案


正如 Compo 已经评论的那样,wmic是一种比net use(主要是因为您不能依赖一致的令牌计数 *)更好的方法,这使得使用for循环处理变得困难。Wmic比 慢一点net 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”(两个标记)


推荐阅读