如何檢查目前批次檔是否在特定資料夾中?

如何檢查目前批次檔是否在特定資料夾中?

嗨,我對批次文件相當陌生,很抱歉,如果這個問題看起來很愚蠢,但我確實需要一些幫助。

所以我需要我的批次腳本來檢查它是否位於指定的資料夾中,例如%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

相關內容