Ich benötige einen Pfad zu dem Ordner, der die Cmd-Datei enthält. Mit% 0 kann ich den Dateinamen erhalten. Aber wie bekomme ich den Ordnernamen?
c: \ temp \ test.cmd >> test.cmd
PS Mein aktuelles Verzeichnis! = Ordner des Skripts.
Ich benötige einen Pfad zu dem Ordner, der die Cmd-Datei enthält. Mit% 0 kann ich den Dateinamen erhalten. Aber wie bekomme ich den Ordnernamen?
c: \ temp \ test.cmd >> test.cmd
PS Mein aktuelles Verzeichnis! = Ordner des Skripts.
Antworten:
Für den Ordnernamen und das Laufwerk können Sie Folgendes verwenden:
echo %~dp0
Mit verschiedenen Modifikatoren können Sie viel mehr Informationen erhalten:
%~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
Dies ist eine Kopie einfügen aus dem "für /?" Befehl an der Eingabeaufforderung. Ich hoffe es hilft.
Die Top 10 der DOS-Batch-Tipps (Ja, DOS-Batch ...) zeigen batchparams.bat (Link zur Quelle als Kern):
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"
(von stackoverflow.com/questions/4451668 )
Die akzeptierte Antwort ist hilfreich, aber es ist nicht sofort ersichtlich, wie ein Dateiname aus einem Pfad abgerufen werden kann, wenn Sie KEINE übergebenen Werte verwenden. Ich konnte dies aus diesem Thread herausarbeiten, aber falls andere nicht so viel Glück haben, geht es folgendermaßen vor:
@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
Jetzt kann die :file_name_from_path
Funktion überall verwendet werden, um den Wert abzurufen, nicht nur für übergebene Argumente. Dies kann äußerst hilfreich sein, wenn die Argumente in unbestimmter Reihenfolge an die Datei übergeben werden können oder der Pfad überhaupt nicht an die Datei übergeben wird.
%~dp1
für Laufwerk und Pfad verwenden.
"
s hinzufügen, !myPath!
wenn Ihr Pfad Leerzeichen enthält (oder wenn die Anführungszeichen Teil von myPath sind)
Für den Fall, dass jemand eine alternative Methode wünscht ...
Wenn es das letzte Unterverzeichnis im Pfad ist, können Sie diesen Einzeiler verwenden:
cd "c:\directory\subdirectory\filename.exe\..\.." && dir /ad /b /s
Dies würde Folgendes zurückgeben:
c:\directory\subdirectory
Das .... fällt zurück zum vorherigen Verzeichnis. / ad zeigt nur Verzeichnisse an / b ist ein Bare-Format. Auflistung / en enthält alle Unterverzeichnisse. Dies wird verwendet, um den vollständigen Pfad des zu druckenden Verzeichnisses abzurufen.
Ich hatte das gleiche Problem in meiner Schleife, in der ich Zip-Dateien im selben Verzeichnis extrahieren und dann die Zip-Datei löschen wollte. Das Problem war, dass 7z den Ausgabeordner benötigt, also musste ich den Ordnerpfad jeder Datei erhalten. Hier ist meine Lösung:
FOR /F "usebackq tokens=1" %%i IN (`DIR /S/B *.zip` ) DO (
7z.exe x %%i -aoa -o%%i\..
)
%% i war ein vollständiger Dateinamenpfad und% ii \ .. gibt einfach den übergeordneten Ordner zurück.
ich hoffe es hilft.
Falls die von Wadih akzeptierte Antwort bei Ihnen nicht funktioniert hat, versuchen Sie es echo %CD%
Dies wurde mit einem bearbeiteten Beispiel cmd zusammengestellt
@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