如果批处理文件是从网络位置/映射驱动器运行的,我想阻止它运行。是否可以知道PWD是否是映射的驱动器/网络位置?
注意:这与下面的SO帖子不同。在下面的帖子中,用户知道他想要阻止运行批处理的驱动器号。
停止批处理文件(如果它从驱动器运行(
%~d0
引用存储执行批处理文件的">驱动器",即批处理文件上的驱动器号和冒号存储在存储介质(本地硬盘,USB记忆棒,CD/DVD驱动器等(或分配了驱动器号的网络资源(网络驱动器(上,或者批处理文件上的两个反斜杠存储在网络资源上并使用UNC路径启动。
带有参数use
的命令net
输出分配了驱动器号的网络资源列表,可以搜索当前执行的批处理文件的驱动器号。
@echo off
if "%~d0" == "\" (
echo Batch file is started using UNC path "%~dp0".
goto :EOF
)
%SystemRoot%System32net.exe use | %SystemRoot%System32findstr.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 /?
......解释引用批处理文件(如参数 0(的参数的修饰符~d
,该参数始终是当前处理的批处理文件。echo /?
goto /?
if /?
net /?
和net use /?
另请参阅:
- GOTO :EOF 回到哪里?
- Microsoft关于使用命令重定向运算符来解释
>nul
的文章。