将Drive映射到未知的共享名称?

时间:2014-08-24 01:16:29

标签: batch-file

我尝试创建一个批处理文件,该文件可以查看网络共享的内容以查找特定的命名目录和子目录,然后将驱动器映射到包含这些内容的共享。问题在于,虽然共享的内容中包含这些文件夹以识别这是正确的共享,但共享名称本身在不同的设置中可能会有所不同,因此我不能在脚本中使用共享名称。

换句话说

\\服务器\共享\模拟游戏\设置

sims和setups目录将始终存在于共享中,但共享名称可以是不同的。服务器名称已存在于批处理文件中,因为它是通过使用set / p命令设置用户提示服务器ip来设置的。

我查看了find和forfiles命令,但这些命令似乎只能在本地搜索,而不是在网络路径上搜索。

由于

1 个答案:

答案 0 :(得分:1)

foxidrive所示,您可以使用net view命令列出服务器的共享。

for命令能够迭代命令的输出。如果存在某个文件夹/文件,在以下粗略命令行中组合这些将为我映射驱动器。

for /F %a in ('net view \\srv') do if exist "\\srv\%a\sims\setup" net use z: \\srv\%a

(如果在命令脚本中使用此行,请不要忘记将%a更改为%%)

净视图会输出一些噪音,但这并不会影响结果。您可以添加一些额外的处理,仅在收到'-----'行后处理共享。

这是如何工作的?

net view \\server输出以下内容:

Shared resources at \\server

Awesome server

Share name     Type  Used as  Comment

-----------------------------------------------------------------------------
Configuration  Disk           System Configuration
Download       Disk           Download Share (Full Access)
Public         Disk           Public Share (Full Access)
Blah           Disk           Blah share (Full Access)
The command completed successfully.

for /f命令将每一行解析到下一个空格。来自FOR /?

FOR /F ["options"] %variable IN (`command`) DO command [command-parameters]
  

...您可以使用FOR / F命令来解析a的输出    命令。你可以通过在文件集之间建立文件集来实现    括号后引用的字符串。它将被视为一个命令    line,传递给子CMD.EXE并捕获输出    进入内存并解析,好像它是一个文件。

如果在net view \\server

上运行,使用该技术将回应以下结果
Shared
Network
Share
-----------------------------------------------------------------------------
Configuration
Download
Public
Blah
The

EXIST运算符检查文件/目录是否存在。通过连接服务器名称,共享和预期的文件夹,您可以找出该文件夹是否在该共享上存在。

正如我所说,前4行和最后一行是噪音,应该被忽略,但在这种情况下它们不会受到太大伤害。