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% 最後有 \,也能正確取出最後一層資料夾名稱。| File5 | File | Last Modified |
|---|---|---|
| Windows多種命令列工具搜尋檔案 | Windows多種命令列工具搜尋檔案 | 2:25 PM - January 12, 2026 |
| Windows 如何用where找檔案 | Windows 如何用where找檔案 | 2:25 PM - January 12, 2026 |
| Windows PowerShell Execution Policy | Windows PowerShell Execution Policy | 2:25 PM - January 12, 2026 |
| Everything極高速Windows 檔案搜尋工具 | Everything極高速Windows 檔案搜尋工具 | 2:25 PM - January 12, 2026 |
| process 正在鎖定檔案或資料夾 | process 正在鎖定檔案或資料夾 | 12:46 AM - December 15, 2025 |