tôi tìm thấy sự kết hợp của cách tiếp cận từ các câu trả lời của djangofan và hoang tưởng là cả hai, đơn giản và hoàn hảo s ufficient, khi nhìn lên thư mục cha kịch bản của tôi:
set FULL_PATH=%~dp0
set FULL_PATH=%FULL_PATH:~1,-1%
for %%i in ("%FULL_PATH%") do set "PARENT_FOLDER=%%~ni"
echo %PARENT_FOLDER%
Vì bạn muốn làm việc trên người dùng nhập vào thay vào đó, bạn phải làm một số công việc bổ sung tối thiểu, để xử lý các biến pháp luật như C: \ foo \ bar \ a. txt so với C: \ foo \ bar \ a.txt hoặc c: /foo/bar/a.txt. sau đó điều này có thể làm việc cho bạn:
@setlocal
@echo off
call:GET_PARENT_FOLDER C:\foo\bar\a.txt
echo %PARENT_FOLDER%
call:GET_PARENT_FOLDER C:\foo\bar\\a.txt
echo %PARENT_FOLDER%
call:GET_PARENT_FOLDER c:/foo/bar/a.txt
echo %PARENT_FOLDER%
pause
goto:EOF
:GET_PARENT_FOLDER
:: Strip the filename, so we get something like this: 'C:\foor\bar\'
set "_FULL_PATH=%~dp1"
:: Strips all dangling '\' and '/' in a loop, so the last folder name becomes accessible
:_STRIP
if not "%_FULL_PATH:~-1%"=="\" if not "%_FULL_PATH:~-1%"=="/" goto:_STRIP_END
set "_FULL_PATH=%_FULL_PATH:~1,-1%"
goto:_STRIP
:_STRIP_END
:: We need the context of a for-loop for the special path operators to be available
for %%i in ("%_FULL_PATH%") do set "PARENT_FOLDER=%%~ni"
goto:EOF
Cảm ơn bạn .. U r thiên tài :) .. hoạt động hoàn hảo –
Tôi không thấy cách thức hoạt động. % ~ p1 không hoạt động đối với tôi. Nó chỉ hoạt động với% ~ dp0 hoặc% ~ p0. – djangofan
@djangofan Tập lệnh lấy một đường dẫn làm đối số và trả về tên thư mục của đường dẫn. – asdfg