如何读取net use生成的文本文件并使用net use命令重新映射网络驱动器

时间:2013-11-29 23:52:01

标签: cmd network-drive net-use

如何读取net use生成的文本文件,我们将其称为network_drive.txt,它包含当前机器映射的网络驱动器,如下图所示:

将记住新的连接。

Status ---      Local ---       Remote ------------------     Network

-------------------------------------------------------------------------------
OK ----------           H:   ----     \\server\users\john -----
                                                Microsoft Windows Network

OK ----------          Y:    ----     \\server\e$\ --------------
                                                Microsoft Windows Network

命令成功完成。

如果状态正常并忽略不可用的文件,如何读取上面的文件以使用相同的Letter路径和路径再次映射网络驱动器?

更新!

@echo off
set drive=\\server\users\john\
net use > %drive%\%USERNAME%_temp_Networkdrive.txt   <-- generating net use file

for /f "skip=6 delims=*" %%a in (%drive%\%USERNAME%_temp_Networkdrive.txt) do (
echo %%a >>%drive%\%USERNAME%_del_Networkdrive.txt )   <-- deleting the first 6 lines

xcopy %drive%\%USERNAME%_del_Networkdrive.txt %drive%\%USERNAME%_Networkdrive.txt /y <-- make a new copy of the network drive file after deleting the lines
findstr /v "The command completed successfully." %drive%\%USERNAME%_del_Networkdrive.txt > %drive%\%USERNAME%_Networkdrive.txt <-- find the string and delete them and make a new copy of file with just the network drives

del %drive%\%USERNAME%_del_Networkdrive.txt /f /q
del %drive%\%USERNAME%_temp_Networkdrive.txt /f /q
for /f "tokens=2,3,4" %%a in (%drive%\%USERNAME%_Networkdrive.txt) do ( net use %%a %%b ) **<-- find the letter path and the drive path and map accordingly.**

然而.. 在某些情况下,有时“Microsoft Windows网络”与字母和云端硬盘路径位于同一行,因此会删除记录/行。

有人可以帮忙吗?

更新

我从findstr行中删除了Microsoft Windows Network,因为for循环中的标记只会获取net use命令的第二个和第三个字符串。

我已经测试了它并且它有效。

此外,最好在第二行使用if exists命令,以便在运行其他命令之前查看文件是否存在。

1 个答案:

答案 0 :(得分:0)

@ECHO OFF
SETLOCAL

FOR /f "tokens=2*delims=: " %%a IN ('type q20294868.txt^|find "\"^|findstr /b "OK"') DO ECHO NET use %%a: %%b
ECHO(======================
FOR /f "tokens=2*delims=: " %%a IN ('type q20294868.txt^|find "\"^|findstr /b "OK"'') DO FOR /f %%c IN ("%%b") DO ECHO NET use %%a: %%c
GOTO :eof

这应该做你想要的。

对于您的情况,您应该将type q20294868.txt替换为net useq20294868.txt只是我用来保存测试数据的文件。

这里有两种不同的方法。对于包含\的行,然后对于/b开始"OK"

的行,首先会对文本进行过滤

我不确定网络名称是否可能包含在数据行而不是单独一行,因此我设计了第二种方法。第一个更简单,第二个更健壮。

请注意,您的原始findstr会删除包含引号中包含的单个字词 ANY 的所有行 - 请参阅提示中的findstr /?以获取更多信息。

当然,结果NET USE命令仅仅ECHO显示在屏幕上,而不是执行。