Tôi cần đường dẫn đến thư mục chứa tập tin cmd. Với% 0 tôi có thể lấy tên tệp. Nhưng làm thế nào để có được tên thư mục?
c: \ temp \ test.cmd >> test.cmd
PS Thư mục hiện tại của tôi! = Thư mục của tập lệnh.
Tôi cần đường dẫn đến thư mục chứa tập tin cmd. Với% 0 tôi có thể lấy tên tệp. Nhưng làm thế nào để có được tên thư mục?
c: \ temp \ test.cmd >> test.cmd
PS Thư mục hiện tại của tôi! = Thư mục của tập lệnh.
Câu trả lời:
Đối với tên thư mục và ổ đĩa, bạn có thể sử dụng:
echo %~dp0
Bạn có thể nhận được nhiều thông tin hơn bằng cách sử dụng các sửa đổi khác nhau:
%~I - expands %I removing any surrounding quotes (")
%~fI - expands %I to a fully qualified path name
%~dI - expands %I to a drive letter only
%~pI - expands %I to a path only
%~nI - expands %I to a file name only
%~xI - expands %I to a file extension only
%~sI - expanded path contains short names only
%~aI - expands %I to file attributes of file
%~tI - expands %I to date/time of file
%~zI - expands %I to size of file
The modifiers can be combined to get compound results:
%~dpI - expands %I to a drive letter and path only
%~nxI - expands %I to a file name and extension only
%~fsI - expands %I to a full path name with short names only
Đây là một bản sao dán từ "cho /?" lệnh trên dấu nhắc. Hy vọng nó giúp.
10 mẹo hàng đầu về DOS Batch (Có, DOS Batch ...) hiển thị batchparams.bat (liên kết đến nguồn dưới dạng ý chính):
C:\Temp>batchparams.bat c:\windows\notepad.exe
%~1 = c:\windows\notepad.exe
%~f1 = c:\WINDOWS\NOTEPAD.EXE
%~d1 = c:
%~p1 = \WINDOWS\
%~n1 = NOTEPAD
%~x1 = .EXE
%~s1 = c:\WINDOWS\NOTEPAD.EXE
%~a1 = --a------
%~t1 = 08/25/2005 01:50 AM
%~z1 = 17920
%~$PATHATH:1 =
%~dp1 = c:\WINDOWS\
%~nx1 = NOTEPAD.EXE
%~dp$PATH:1 = c:\WINDOWS\
%~ftza1 = --a------ 08/25/2005 01:50 AM 17920 c:\WINDOWS\NOTEPAD.EXE
cd /d "%~dp0"
(từ stackoverflow.com/questions/4451668 )
Câu trả lời được chấp nhận là hữu ích, nhưng không rõ ràng ngay lập tức làm thế nào để lấy tên tệp từ một đường dẫn nếu bạn KHÔNG sử dụng thông qua các giá trị. Tôi đã có thể làm việc này từ chủ đề này, nhưng trong trường hợp những người khác không may mắn như vậy, đây là cách nó được thực hiện:
@echo off
setlocal enabledelayedexpansion enableextensions
set myPath=C:\Somewhere\Somewhere\SomeFile.txt
call :file_name_from_path result !myPath!
echo %result%
goto :eof
:file_name_from_path <resultVar> <pathVar>
(
set "%~1=%~nx2"
exit /b
)
:eof
endlocal
Bây giờ :file_name_from_path
hàm có thể được sử dụng ở bất cứ đâu để lấy giá trị, không chỉ cho các đối số được truyền vào. Điều này có thể cực kỳ hữu ích nếu các đối số có thể được truyền vào tệp theo thứ tự không xác định hoặc đường dẫn không được chuyển vào tệp.
%~dp1
cho ổ đĩa và đường dẫn.
"
s xung quanh !myPath!
nếu đường dẫn của bạn có khoảng trắng trong đó (hoặc có dấu ngoặc kép là một phần của myPath)
Trong trường hợp bất cứ ai cũng muốn một phương pháp thay thế ...
Nếu đó là thư mục con cuối cùng trong đường dẫn, bạn có thể sử dụng lớp lót này:
cd "c:\directory\subdirectory\filename.exe\..\.." && dir /ad /b /s
Điều này sẽ trả về như sau:
c:\directory\subdirectory
Các .... thả trở lại thư mục trước. / ad chỉ hiển thị các thư mục / b là một danh sách định dạng trần / s bao gồm tất cả các thư mục con. Điều này được sử dụng để có được đường dẫn đầy đủ của thư mục để in.
Tôi gặp vấn đề tương tự trong vòng lặp của mình khi tôi muốn trích xuất các tệp zip trong cùng thư mục và sau đó xóa tệp zip. Vấn đề là 7z yêu cầu thư mục đầu ra, vì vậy tôi phải lấy đường dẫn thư mục của mỗi tệp. Đây là giải pháp của tôi:
FOR /F "usebackq tokens=1" %%i IN (`DIR /S/B *.zip` ) DO (
7z.exe x %%i -aoa -o%%i\..
)
%% i là đường dẫn tên tệp đầy đủ và% ii \ .. chỉ cần trả về thư mục mẹ.
hy vọng nó giúp.
Trong trường hợp câu trả lời được chấp nhận bởi Wadih không hiệu quả với bạn, hãy thử echo %CD%
Điều này đã được đặt cùng với một số ví dụ chỉnh sửa cmd
@Echo off
Echo ********************************************************
Echo * ZIP Folder Backup using 7Zip *
Echo * Usage: Source Folder, Destination Drive Letter *
Echo * Source Folder will be Zipped to Destination\Backups *
Echo ********************************************************
Echo off
set year=%date:~-4,4%
set month=%date:~-10,2%
set day=%date:~-7,2%
set hour=%time:~-11,2%
set hour=%hour: =0%
set min=%time:~-8,2%
SET /P src=Source Folder to Backup:
SET source=%src%\*
call :file_name_from_path nam %src%
SET /P destination=Backup Drive Letter:
set zipfilename=%nam%.%year%.%month%.%day%.%hour%%min%.zip
set dest="%destination%:\Backups\%zipfilename%"
set AppExePath="%ProgramFiles(x86)%\7-Zip\7z.exe"
if not exist %AppExePath% set AppExePath="%ProgramFiles%\7-Zip\7z.exe"
if not exist %AppExePath% goto notInstalled
echo Backing up %source% to %dest%
%AppExePath% a -r -tzip %dest% %source%
echo %source% backed up to %dest% is complete!
TIMEOUT 5
exit;
:file_name_from_path <resultVar> <pathVar>
(
set "%~1=%~nx2"
exit /b
)
:notInstalled
echo Can not find 7-Zip, please install it from:
echo http://7-zip.org/
:end
PAUSE