【问题标题】:Windows 10: How can I determine whether a batch file is being run from network mapped driveWindows 10:如何确定批处理文件是否正在从网络映射驱动器运行
【发布时间】:2020-01-02 08:36:15
【问题描述】:

如果从网络位置/映射驱动器运行批处理文件,我想阻止它运行。是否可以知道 PWD 是否是映射的驱动器/网络位置?

注意:这与下面的 SO 帖子不同。在下面的帖子中,用户知道他想要阻止运行批处理的驱动器号。

Stop Batch file if its being run from a drive

【问题讨论】:

    标签: windows batch-file


    【解决方案1】:

    %~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 /?

    另见:

    【讨论】:

      猜你喜欢
      • 2021-02-23
      • 2016-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-30
      • 1970-01-01
      相关资源
      最近更新 更多