【发布时间】:2020-01-02 08:36:15
【问题描述】:
如果从网络位置/映射驱动器运行批处理文件,我想阻止它运行。是否可以知道 PWD 是否是映射的驱动器/网络位置?
注意:这与下面的 SO 帖子不同。在下面的帖子中,用户知道他想要阻止运行批处理的驱动器号。
【问题讨论】:
标签: windows batch-file
如果从网络位置/映射驱动器运行批处理文件,我想阻止它运行。是否可以知道 PWD 是否是映射的驱动器/网络位置?
注意:这与下面的 SO 帖子不同。在下面的帖子中,用户知道他想要阻止运行批处理的驱动器号。
【问题讨论】:
标签: windows batch-file
%~d0 引用“驱动器”,执行的批处理文件存储在该驱动器上,即批处理文件的驱动器号和冒号存储在存储介质(本地硬盘、USB 记忆棒、CD /DVD 驱动器等或分配了驱动器号的网络资源(网络驱动器)或批处理文件上的两个反斜杠存储在网络资源上并使用 UNC 路径启动。
带有参数use的命令net输出分配了驱动器号的网络资源列表,可以搜索当前执行的批处理文件的驱动器号。
@echo off
if "%~d0" == "\\" (
echo Batch file is started using UNC path "%~dp0".
goto :EOF
)
%SystemRoot%\System32\net.exe use | %SystemRoot%\System32\findstr.exe /I /L /C:" %~d0 " >nul
if not errorlevel 1 (
echo Batch file is started from network drive %~d0.
goto :EOF
)
echo Okay running batch file from drive %~d0.
注意:搜索字符串也可以只是%~d0 而不是" %~d0 "。需要引号的额外空格只是确保在net use 输出的第二列中找到带有驱动器号和冒号的行。
要了解所使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读每个命令显示的所有帮助页面。
call /? ... 解释修饰符 ~d 引用批处理文件的参数,如参数 0,它始终是当前处理的批处理文件。echo /?goto /?if /?net /? 和 net use /?
另见:
>nul 的解释。【讨论】: