Saya perlu path ke folder yang berisi file cmd. Dengan% 0 saya bisa mendapatkan nama file. Tapi bagaimana cara mendapatkan nama folder?
c: \ temp \ test.cmd >> test.cmd
PS Direktori saya saat ini! = Folder skrip.
Saya perlu path ke folder yang berisi file cmd. Dengan% 0 saya bisa mendapatkan nama file. Tapi bagaimana cara mendapatkan nama folder?
c: \ temp \ test.cmd >> test.cmd
PS Direktori saya saat ini! = Folder skrip.
Jawaban:
Untuk nama folder dan drive, Anda dapat menggunakan:
echo %~dp0
Anda bisa mendapatkan lebih banyak informasi menggunakan pengubah berbeda:
%~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
Ini adalah salinan dari "untuk /?" perintah pada prompt. Semoga ini bisa membantu.
10 tips DOS Batch (Ya, DOS Batch ...) menunjukkan batchparams.bat (tautan ke sumber sebagai intisari):
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"
(dari stackoverflow.com/questions/4451668 )
Jawaban yang diterima sangat membantu, tetapi tidak segera jelas bagaimana cara mengambil nama file dari jalur jika Anda TIDAK menggunakan nilai yang diteruskan. Saya bisa menyelesaikan ini dari utas ini, tetapi jika yang lain tidak seberuntung ini, inilah caranya
@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
Sekarang :file_name_from_path
fungsi dapat digunakan di mana saja untuk mengambil nilai, tidak hanya untuk argumen yang diteruskan. Ini bisa sangat membantu jika argumen dapat diteruskan ke file dalam urutan yang tidak ditentukan atau jalur tidak diteruskan ke file sama sekali.
%~dp1
untuk drive dan path.
"
sekitar !myPath!
jika jalur Anda memiliki ruang di dalamnya (atau memiliki tanda kutip menjadi bagian dari myPath)
Jika ada yang menginginkan metode alternatif ...
Jika ini adalah subdirektori terakhir di jalur, Anda bisa menggunakan satu-baris ini:
cd "c:\directory\subdirectory\filename.exe\..\.." && dir /ad /b /s
Ini akan mengembalikan yang berikut:
c:\directory\subdirectory
.... turun kembali ke direktori sebelumnya. / iklan hanya menampilkan direktori / b adalah format daftar kosong / s termasuk semua subdirektori. Ini digunakan untuk mendapatkan path lengkap dari direktori untuk dicetak.
Saya memiliki masalah yang sama di loop saya di mana saya ingin mengekstrak file zip di direktori yang sama dan kemudian menghapus file zip. Masalahnya adalah bahwa 7z memerlukan folder output, jadi saya harus mendapatkan path folder dari setiap file. Ini solusinya:
FOR /F "usebackq tokens=1" %%i IN (`DIR /S/B *.zip` ) DO (
7z.exe x %%i -aoa -o%%i\..
)
%% i adalah path nama file lengkap dan% ii \ .. cukup mengembalikan folder induk.
semoga membantu.
Jika jawaban yang diterima oleh Wadih tidak berhasil untuk Anda, cobalah echo %CD%
Ini disatukan dengan beberapa contoh cmd yang diedit
@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