batch-file - 用于自动映射网络驱动器但无法检测网络驱动器的批处理脚本
问题描述
我正在编写一个脚本来自动映射 2 个网络驱动器,使用相同的代码,除了相应地更改 IP 地址,只能成功映射 1 个网络驱动器。
我试过手动映射网络驱动器,它工作正常。
if EXIST \\172.168.101.187\smb (
set shareExistsTX=1
echo Sender Share exist.
) else (
set shareExistsTX=0
echo Sender Share Dont exist.
)
if EXIST Y:\ (
set driveExistsTX=1
echo Drive Y:/ Unavailable
) else (
set driveExistsTX=0
echo Drive Y:/ available
)
if %shareExistsTX%==1 if %driveExistsTX%==1 (
echo deleting network drive
net use /delete Y: /y
set driveExistsTX=0
)
if %shareExistsTX%==1 if not %driveExistsTX%==1 (echo mounting smbserver Sender
net use Y: \\172.168.101.187\smb /persistent:Yes /user:user password
)
set driveExistsTX=
set shareExistsTX=
if EXIST \\172.168.101.188\smb (
set shareExistsRX=1
echo Receiver Share Exist
) else (
set shareExistsRX=0
echo Receiver Share Dont exist.
)
if EXIST Z:\ (
set driveExistsRX=1
echo Drive Z:/ Unavailable
) else (
set driveExistsRX=0
echo Drive Z:/ available
)
if %shareExistsRX%==1 if %driveExistsRX%==1 (
echo deleting network drive
net use /delete Z: /y
set driveExistsRX=0
)
if %shareExistsRX%==1 if not %driveExistsRX%==1 (
echo mounting smbserver Receiver
net use Z: \\172.168.101.188\smb /persistent:Yes /user:user password
)
set driveExistsRX=
set shareExistsRX=
pause
我应该映射两个网络驱动器,但是只有 172.168.101.187 被映射,而出现“接收器共享不存在”的错误消息。这意味着脚本无法检测到 172.168.101.188 的网络驱动器
解决方案
要直接解决您的问题,请测试共享中项目的存在,而不是共享本身:
if EXIST \\172.168.101.188\smb\*.
if EXIST \\172.168.101.187\smb\*.
编辑 但是,根据您的评论,文件夹中没有任何内容,所以让我们创建一些东西,测试它并再次删除它。像这样:
type nul>\\172.168.101.188\smb\_tmp
if EXIST \\172.168.101.188\smb\*.
type nul>\\172.168.101.187\smb\_tmp
if EXIST \\172.168.101.187\smb\*.
然后在脚本中完成映射后,添加:
del /Q Y:\_tmp
del /Q Z:\_tmp
或者
del /Q \\172.168.101.187\smb\_tmp >nul
del /Q \\172.168.101.188\smb\_tmp >nul
因此,要获取您的实际脚本并对其进行所有更改,我们将得到这个,它应该可以工作:
@echo off
type nul>\\172.168.101.187\smb\_tmp
type nul>\\172.168.101.188\smb\_tmp
if EXIST \\172.168.101.187\smb (
set shareExistsTX=1
echo Sender Share exist.
) else (
set shareExistsTX=0
echo Sender Share Don't exist.
)
if EXIST Y:\ (
set driveExistsTX=1
echo Drive Y:/ Unavailable
) else (
set driveExistsTX=0
echo Drive Y:/ available
)
if %shareExistsTX%==1 if %driveExistsTX%==1 (
echo deleting network drive
net use /delete Y: /y
set driveExistsTX=0
)
if %shareExistsTX%==1 if not %driveExistsTX%==1 (echo mounting smbserver Sender
net use Y: \\172.168.101.187\smb /persistent:Yes /user:user password
)
set driveExistsTX=
set shareExistsTX=
if EXIST \\172.168.101.188\smb (
set shareExistsRX=1
echo Receiver Share Exist
) else (
set shareExistsRX=0
echo Receiver Share Dont exist.
)
if EXIST Z:\ (
set driveExistsRX=1
echo Drive Z:/ Unavailable
) else (
set driveExistsRX=0
echo Drive Z:/ available
)
if %shareExistsRX%==1 if %driveExistsRX%==1 (
echo deleting network drive
net use /delete Z: /y
set driveExistsRX=0
)
if %shareExistsRX%==1 if not %driveExistsRX%==1 (
echo mounting smbserver Receiver
net use Z: \\172.168.101.188\smb /persistent:Yes /user:user password
)
del /Q Y:\_tmp>nul
del /Q Z:\_tmp>nul
set driveExistsRX=
set shareExistsRX=
pause
那么也许这个版本略有不同?
我不需要检查驱动器的存在,我只是尝试映射它,不管:
@echo off
setlocal enabledelayedexpansion
set "shares=\\172.168.101.187\smb \\172.168.101.188\smb"
for %%i in (%shares%) do (
type nul>%%i\_tmp
if "%%i"=="\\ppsm202zatcwi\Mac" set "dr=Y:"
if "%%i"=="\\172.168.101.188\smb" set "dr=Z:"
if exist %%i\*. (
net use !dr! %%i >nul 2>&1 && echo Mapped !dr! to %%i
del /Q !dr!\_tmp>nul
) else (
echo Sharename %%i not found unable to map !dr!
)
)
pause
推荐阅读
- savon - SAVON 在信封中设置信封命名空间
- flutter - 如何使用 Flutter App 运行 TeraTerm
- css - 如何在不更改占位符字体粗细的情况下使输入字段中的字体粗细变为粗体?
- mathjax - 即使 readOnly 为 True,草稿 js mathjax 插件也始终可编辑
- .net-core - Dotnet 身份:如何注册 2-Factor 提供程序
- typescript - 打字稿:数字 | 大批
不能做数组操作 - flutter - 如何更改行小部件内小部件的堆栈顺序?
- python-3.x - 如何将错误日志中的多个属性作为django中的简单参数传递?
- swift - 导航链接从侧面菜单推送时弹出主视图
- java - 在Java中将包装的流转换为另一个流