Ho bisogno del percorso della cartella che contiene il file cmd. Con% 0 posso ottenere il nome del file. Ma come ottenere il nome della cartella?
c: \ temp \ test.cmd >> test.cmd
PS La mia directory corrente! = Cartella dello script.
Ho bisogno del percorso della cartella che contiene il file cmd. Con% 0 posso ottenere il nome del file. Ma come ottenere il nome della cartella?
c: \ temp \ test.cmd >> test.cmd
PS La mia directory corrente! = Cartella dello script.
Risposte:
Per il nome della cartella e l'unità, è possibile utilizzare:
echo %~dp0
Puoi ottenere molte più informazioni usando diversi modificatori:
%~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
Questa è una copia incolla da "per /?" comando al prompt. Spero che sia d'aiuto.
I 10 migliori suggerimenti batch di DOS (Sì, batch di DOS ...) mostrano batchparams.bat (collegamento all'origine come sintesi):
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"
(da stackoverflow.com/questions/4451668 )
La risposta accettata è utile, ma non è immediatamente ovvio come recuperare un nome file da un percorso se NON si utilizzano valori passati. Sono stato in grado di risolverlo da questo thread, ma nel caso in cui altri non siano così fortunati, ecco come è fatto:
@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
Ora la :file_name_from_path
funzione può essere utilizzata ovunque per recuperare il valore, non solo per argomenti passati. Questo può essere estremamente utile se gli argomenti possono essere passati al file in un ordine indeterminato o se il percorso non è passato affatto nel file.
%~dp1
per unità e percorso.
"
s in giro !myPath!
se il tuo percorso contiene spazi (o se le virgolette fanno parte di myPath)
Nel caso qualcuno voglia un metodo alternativo ...
Se è l'ultima sottodirectory nel percorso, è possibile utilizzare questo one-liner:
cd "c:\directory\subdirectory\filename.exe\..\.." && dir /ad /b /s
Ciò restituirebbe quanto segue:
c:\directory\subdirectory
.... torna alla directory precedente. / annuncio mostra solo le directory / b è un elenco in formato nudo che include tutte le sottodirectory. Viene utilizzato per ottenere il percorso completo della directory da stampare.
Ho avuto lo stesso problema nel mio ciclo in cui volevo estrarre i file zip nella stessa directory e quindi eliminare il file zip. Il problema era che 7z richiede la cartella di output, quindi ho dovuto ottenere il percorso della cartella di ciascun file. Ecco la mia soluzione:
FOR /F "usebackq tokens=1" %%i IN (`DIR /S/B *.zip` ) DO (
7z.exe x %%i -aoa -o%%i\..
)
%% ero un percorso completo del nome file e% ii \ .. restituisce semplicemente la cartella principale.
spero che sia d'aiuto.
Nel caso in cui la risposta accettata da Wadih non abbia funzionato per te, prova echo %CD%
Questo è stato messo insieme con alcuni esempi di cmd modificati
@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