如何检查当前批处理文件是否在特定文件夹中?

Man*_*sai 5 batch-file working-directory windows-10

嗨,我对批处理文件还很陌生,如果这个问题看起来很愚蠢,我很抱歉,但我真的需要一些帮助。

所以我需要我的批处理脚本来检查它是否在指定的文件夹中,%userprofile%\Desktop例如。我不希望它关心自己的文件名。我完全不知道从哪里开始。我知道如何获取当前路径/文件名等,但这就是我所知道的。如何让程序将其当前路径与我想查看它是否在其中的路径进行比较?或者还有其他更有效的方法吗?

我想要实现的是这样的:

if this file is in Desktop folder(
    echo It's here
)else(
    echo It's not here
)
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏,谢谢大家

Vla*_*čík 3

无需道歉,因为您提出的问题比您想象的更棘手。

解决方案

这是您可以测试批处理文件是否位于特定文件夹中的方法,在您的情况下是在桌面文件夹中:

@echo off

:: Normalize this batch script's path
set BATCH_PATH=%~dp0
set BATCH_PATH=%BATCH_PATH:~0,-1%

:: Test for equality
if "%BATCH_PATH%"=="%USERPROFILE%\Desktop" (
    echo This file is on Desktop.
) else (
    echo This file is not on Desktop.
)
Run Code Online (Sandbox Code Playgroud)

注意事项

  • 标准化路径的替代方法(也是我最喜欢的)是:

    pushd "%~dp0"
    set BATCH_PATH=%CD%
    popd
    
    Run Code Online (Sandbox Code Playgroud)
    • 无论如何,您可能想要删除任何尾随的\,这是标准化为您做的事情之一
  • 使用%~dp0变量而不是%cd%,因为后一个语义是您的脚本操作的文件夹,而第一个语义是您的脚本所在的文件夹(这就是您所要求的)

    • %0为您提供批处理脚本位置
    • 通过添加dp(即%dp0),您要求提供省略文件名和扩展名的磁盘路径(类似于example.bat,这将成为下一步的负担 - 相等性检查)
    • 通过添加,~您要求"在必要时删除任何打开或关闭(即包含空间的路径)
  • 路径被包裹起来,"以防止由于路径字符串中可能存在空格而导致错误


并不像人们想象的那么简单,对吧?


归档时间:

查看次数:

3068 次

最近记录:

7 年,2 月 前