Cmd dosyası içeren klasörün yolunu ihtiyacım var. % 0 ile dosya adını alabilirim. Ancak klasör adı nasıl alınır?
c: \ temp \ test.cmd >> test.cmd
PS Geçerli dizinim! = Komut dosyasının klasörü.
Cmd dosyası içeren klasörün yolunu ihtiyacım var. % 0 ile dosya adını alabilirim. Ancak klasör adı nasıl alınır?
c: \ temp \ test.cmd >> test.cmd
PS Geçerli dizinim! = Komut dosyasının klasörü.
Yanıtlar:
Klasör adı ve sürücüsü için şunları kullanabilirsiniz:
echo %~dp0
Farklı değiştiriciler kullanarak daha fazla bilgi edinebilirsiniz:
%~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
Bu, "for /?" komut isteminde. Umarım yardımcı olur.
En iyi 10 DOS Toplu İş ipucu (Evet, DOS Toplu İş ...) batchparams.bat ( öz kaynak olarak kaynağa bağlantı ) gösterir :
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"
( stackoverflow.com/questions/4451668
Kabul edilen cevap yararlıdır, ancak iletilen değerleri KULLANMADIĞINIZda yoldan dosya adını nasıl alacağınız hemen belli olmaz. Ben bu iş parçacığı üzerinden bunu başardı, ama diğerleri çok şanslı değilse, işte nasıl yapılır:
@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
Şimdi :file_name_from_path
fonksiyon sadece argümanlarda değil, değeri almak için her yerde kullanılabilir. Bu, argümanlar dosyaya belirsiz bir sırada iletilebiliyorsa veya yol dosyaya hiç aktarılmamışsa son derece yararlı olabilir.
%~dp1
yalnızca sürücü ve yol için kullanın.
"
etrafına s eklemeniz gerekir!myPath!
Herhangi birinin alternatif bir yöntem istemesi durumunda ...
Yoldaki son alt dizinse, bu tek astarı kullanabilirsiniz:
cd "c:\directory\subdirectory\filename.exe\..\.." && dir /ad /b /s
Bu, aşağıdakileri döndürür:
c:\directory\subdirectory
.... bir önceki dizine geri döner. / ad yalnızca dizinleri gösterir / b, çıplak bir biçim listesidir / s, tüm alt dizinleri içerir. Bu, yazdırılacak dizinin tam yolunu almak için kullanılır.
Ben aynı dizinde zip dosyaları ayıklamak ve sonra zip dosyasını silmek istediğim benim döngüde aynı sorun vardı. Sorun 7z çıktı klasörü gerektirir, bu yüzden her dosyanın klasör yolunu elde etmek zorunda kaldı. İşte benim çözümüm:
FOR /F "usebackq tokens=1" %%i IN (`DIR /S/B *.zip` ) DO (
7z.exe x %%i -aoa -o%%i\..
)
%% i bir tam dosya adı yoluydu ve% ii \ .. yalnızca üst klasörü döndürüyor.
Umarım yardımcı olur.
Wadih'in kabul ettiği cevabın sizin için işe yaramaması durumunda, echo %CD%
Bu bazı düzenlenmiş cmd örnekleri ile bir araya getirildi
@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