windows batch file with path name

你遇到的問題是:當 %workdir% 尾端有 \ 時,for %%a in ("%workdir%") do set foldername=%%~nxa 會把它當成「根目錄」,導致取不到最後一層資料夾名稱。解法是先把尾端的 \ 去掉,再取最後一層名稱。
下面是改良版的批次檔:

@echo off
REM 如果有傳入參數,workdir 使用 %1;否則使用目前目錄 %CD%
if "%~1"=="" (
    set "workdir=%CD%"
) else (
    set "workdir=%~1"
)
REM 去掉尾端的反斜線(如果有)
if "%workdir:~-1%"=="\" set "workdir=%workdir:~0,-1%"
echo workdir=%workdir%
REM 取出最後一層資料夾名稱
for %%a in ("%workdir%") do set "foldername=%%~nxa"
echo Full path: %workdir%
echo Folder name only: %foldername%
set "vaultName=%foldername%"

關鍵修改

  • if "%workdir:~-1%"=="\" set "workdir=%workdir:~0,-1%"
    這行會檢查最後一個字元是否是 \,如果是,就去掉它。
  • set "var=value" 的寫法,避免值裡面有空格或特殊字元時出錯。
    這樣即使 %1%CD% 最後有 \,也能正確取出最後一層資料夾名稱。

Also See

5
1:25 AM - December 07, 2025
1:25 AM - December 07, 2025
8:21 PM - December 06, 2025
8:21 PM - December 06, 2025
8:21 PM - December 06, 2025