Jetzt möchte ich eine .batDatei haben, die einen Parameter erhält, der diesen Satz ausführt. Zum Beispiel regadd.bat myapp.exewürde das ausführen . Was soll die Zeile in der .batDatei sein?
Die Punkte sind:
Wie wird der Parameter eingefügt?
Wie wird der Parameter mit .exeremove (für den Verzeichnisteil) eingefügt ?
Wie man das Erweitern vermeidet, %1das geht in die Registry (ich weiß nicht, wie man es richtig entgeht).
Ich habe viele Ressourcen gefunden (z. B. "%" in einer Batchdatei verwenden ), aber ich möchte nicht mit der Registrierung basteln. Mein Einsatz für 1 und 3 ist (muss noch 2 klappen):
Befehlszeile : Um eine Erweiterung %MYAPPSDIR%durch Befehlszeileninterpreter zu vermeiden, sollte das %Prozentzeichen durch das Standard-CLI-Escape-Zeichen ( ^Caret) ersetzt werden: ^%MYAPPSDIR^%oder ^%1;
.batSkript : zu vermeiden erweitern %MYAPPSDIR%oder %1durch Batch - Interpreter, der %sollte Prozentzeichen werden verdoppelt, wie folgt: %%MYAPPSDIR%%und %%1, respectively.
So unterscheiden Sie die Parameter Ihres Batch-Skripts:
set "par1=%~1" if "%par1%"=="" ( echo no parameter supplied goto :eof ) else ( set "par=%par1:.exe=%" ) if "%par%"=="%par1%" ( echo .exe not present ) else ( echo .exe present )
oder (vielleicht besser)
set "par1=%~1" if "%par1%"=="" ( echo no parameter supplied goto :eof ) else ( set "par=%par1:~-4%" ) if /I "%par%"==".exe" ( echo .exe present ) else ( echo .exe not present )
oder (vielleicht das beste)
set "par1=%~1" if "%par1%"=="" ( echo no parameter supplied goto :eof ) else ( set "par=%~x1" ) if /I "%par%"==".exe" ( echo .exe present ) else ( echo .exe not present )
Vielen Dank. Was ist mit Punkt 2?
sancho.s vor 8 Jahren
0
@ sancho.s Verwendung von "% ~ n1" - erweitert "% 1" zu einem Dateinamen ohne Dateierweiterung. Weitere Informationen zu dieser und anderen Parametererweiterungen finden Sie unter [Befehlszeilenargumente (Parameter)] (http://ss64.com/nt/syntax-args.html).
DavidPostill vor 8 Jahren
1
Sehr gründliche Antwort! Ich werde die Optionen überprüfen und Feedback geben.
sancho.s vor 8 Jahren
0
Feedback Nr. 1: Ich weiß nicht, warum Sie 3 Stufen von "Würdigkeit" für Ihre Lösungen festgelegt haben (vielleicht könnten Sie die Gründe dafür angeben). Für den beabsichtigten Einsatz, wie er im OP veröffentlicht wurde, fand ich jedenfalls den ersten hilfreich, da er den Namen der App ohne .exe für die spätere Verwendung extrahieren kann. Die folgenden zwei Alternativen erkennen nur, wenn die EXE-Datei vorhanden ist, sie isolieren jedoch nicht den App-Namen.
sancho.s vor 8 Jahren
0
@DavidPostill - Ihr Kommentar ist eine Antwort wert.
sancho.s vor 8 Jahren
0
Ich habe unten eine zusammenfassende Antwort hinzugefügt, die die entsprechende Codezeile http://superuser.com/a/947474/245595 enthält
sancho.s vor 8 Jahren
0
1
DavidPostill
Wie verwende ich den Parameter mit der entfernten .exe-Datei (für den Teil des Verzeichnisses)?
Sie können verwenden %~n1.
Dies erweitert sich %1zu einem Dateinamen ohne die Dateierweiterung.
Parametererweiterungen
Wenn ein Argument zur Angabe eines Dateinamens verwendet wird, kann die folgende erweiterte Syntax angewendet werden:
Wir verwenden die Variable% 1 (dies funktioniert aber für jeden Parameter)
%~f1 - Erweitern Sie% 1 zu einem vollständig qualifizierten Pfadnamen - C: \ utils \ MyFile.txt
%~d1 - Erweitern Sie% 1 nur auf einen Laufwerksbuchstaben. - C:
%~p1 - Erweitern Sie% 1 nur auf einen Pfad, z. B. \ utils \. Dies schließt ein nachfolgendes \ ein, das von einigen Befehlen als Escape-Zeichen interpretiert wird.
%~n1 - Erweitern Sie% 1 zu einem Dateinamen ohne Dateierweiterung C: \ utils \ MyFile oder, wenn nur ein Pfad vorhanden ist (ohne nachgestellten Backslash) - der letzte Ordner in diesem Pfad.
%~x1 - Erweitern Sie% 1 nur auf eine Dateierweiterung - .txt
%~s1 - Ändern Sie die Bedeutung von f, n, s und x, um auf den Kurznamen 8.3 zu verweisen (falls vorhanden).
%~1 - Erweitern Sie% 1, indem Sie alle umgebenden Anführungszeichen entfernen (").
%~a1 - Zeigen Sie die Dateiattribute von% 1 an
%~t1 - Datum / Uhrzeit von% 1 anzeigen
%~z1 - Zeigen Sie die Dateigröße von% 1 an
%~$PATH:1 - Durchsuchen Sie die Umgebungsvariable PATH und erweitern Sie% 1 um den vollständig qualifizierten Namen der ersten gefundenen Übereinstimmung.
Die Modifikatoren oben können kombiniert werden:
%~dp1 - Erweitern Sie% 1 nur um einen Laufwerkbuchstaben und -pfad
%~sp1 - Erweitern Sie% 1 auf einen Pfad, der auf 8,3 Zeichen verkürzt ist
%~nx2 - Erweitern Sie% 2 nur um einen Dateinamen und eine Erweiterung
set "app1=%~1" if "%app1%"=="" ( echo No parameter supplied. This should be run as echo regadd.bat myapp.exe echo or echo regadd.bat myapp goto :eof ) else ( REM set "app=%app1:.exe=%" set "app=%~n1" ) if "%app%"=="%app1%" ( REM echo .exe not present ) else ( REM echo .exe present ) echo App is %app% reg add "HKCR\Applications\%app%.exe\shell\open\command" /ve /t REG_EXPAND_SZ /d "\"%%MYAPPSDIR%%\%app%\%app%.exe\" \"%%1\"" /f