-2

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

将记住新的连接。

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

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

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

命令成功完成。

仅当状态正常并忽略不可用的情况下,如何读取上述文件以使用相同的字母路径和路径再次映射网络驱动器?

更新!

@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 命令,以便在运行其他命令之前查看文件是否存在。

4

1 回答 1

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.txtnet useq20294868.txt只是我用来保存你的测试数据的一个文件。

这里有两种不同的方法。文本首先过滤包含的行\,然后过滤那些/b开头的行"OK"

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

请注意,您的原件findstr将删除包含引号中包含的任何单个单词的任何行 - 请参阅findstr /?提示以获取更多信息。

当然,生成的NET USE命令只是ECHO编辑到屏幕上,而不是执行。

于 2013-11-30T06:48:36.230 回答