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% 最後有 \,也能正確取出最後一層資料夾名稱。| 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 |