我尝试创建一个批处理文件,该文件可以查看网络共享的内容以查找特定的命名目录和子目录,然后将驱动器映射到包含这些内容的共享。问题在于,虽然共享的内容中包含这些文件夹以识别这是正确的共享,但共享名称本身在不同的设置中可能会有所不同,因此我不能在脚本中使用共享名称。
换句话说
\\服务器\共享\模拟游戏\设置
sims和setups目录将始终存在于共享中,但共享名称可以是不同的。服务器名称已存在于批处理文件中,因为它是通过使用set / p命令设置用户提示服务器ip来设置的。
我查看了find和forfiles命令,但这些命令似乎只能在本地搜索,而不是在网络路径上搜索。
由于
答案 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行和最后一行是噪音,应该被忽略,但在这种情况下它们不会受到太大伤害。