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

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

你好,我对批处理文件还很陌生,所以很抱歉这个问题看起来很愚蠢,但我确实需要一些帮助。

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

我想要实现的目标是这样的:

if this file is in Desktop folder(
    echo It's here
)else(
    echo It's not here
)

任何帮助都值得感激,谢谢大家

答案1

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

解决方案

您可以用以下方法测试批处理文件是否位于特定文件夹中,在本例中为桌面文件夹:

@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.
)

注意事项

  • 规范化路径的另一种方法(也是我最喜欢的)是:

    pushd "%~dp0"
    set BATCH_PATH=%CD%
    popd
    
    • 无论如何,您可能希望删除任何尾随的\,这是规范化为您做的事情之一
  • 使用%~dp0变量代替%cd%,因为后者的语义是你的脚本所操作的文件夹而第一个是脚本所在的文件夹(这就是你所要求的)

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


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

答案2

最小工作示例使用%cd%

IF %cd%==%userprofile%\Desktop (
    ECHO It's here
) ELSE (
    ECHO It's not here
)

使用中间变量:

FOR /F "tokens=*" %%a in ('cd') do SET CURRENT_DIR=%%a
IF %CURRENT_DIR%==%userprofile%\Desktop (
    ECHO It's here
) ELSE (
    ECHO It's not here
)

既然你说你不知道从哪里开始,这里有一个很好的阅读材料: https://en.wikibooks.org/wiki/Windows_Batch_Scripting

相关内容