2016-07-09 7 views
0

Windows-CMD-Eingabeaufforderung Auto-Vervollständigen, (ähnliche Funktion in anderen Terminals), kommt manchmal sehr nützlich, wenn Sie nicht sicher sind, den richtigen Pfad oder Dateinamen.Autocomplete Pfad in cmd Batch


Fazit ist, wie diese Funktion im Batch-Scripting zu verwenden ist.
Beispiel:
das Skript
"C:\Program Files\Java\jre1.8.0_92\bin\javaw.exe" -jar post.jar
die Sache hier ist, dass Java-Version nicht immer gleich ist, so ist es erforderlich, so etwas wie dieses
"C:\Program Files\Java\jre*\bin\javaw.exe" -jar post.jar

+0

Es gibt keine solche Funktion zur automatischen Vervollständigung in cmd. Was würde das bedeuten, wenn es mehrere Verzeichnisse gäbe, die 'jre *' entsprechen? Die nächste Sache, die dazu führt, wäre, das gewünschte JRE-Verzeichnis in die PATH-Variable zu bringen. Dann würden Sie keinen Verzeichnispfad zu javaw.exe angeben. – lit

+0

Das ist genau das, was ich versuche zu sagen – Bil

+0

Sie können die obige Version parametrisieren und einfach in den Pfad der ausführbaren Datei injizieren, wenn Sie es wünschen. – ManoDestra

Antwort

1

möglich sein Verwenden Sie keine Platzhalter in der Mitte eines Pfades, aber Sie können am Ende (das letzte Element). Weil Sie es zwischendurch benötigen, spaltet es bis:

for /f "delims=" %%a in ('dir /b /ad /on "C:\Program Files\Java\jre*"') do set ver=%%a 
set "exec=C:\Program Files\Java\%ver%\javaw.exe" 
"%exec%" -jar post.jar 

Dies wird den Pfad mit der höchsten Versionsnummer erhalten, wenn es mehr als eine gibt.

+0

gibt es nur eine Sache, der letzte Befehl sollte "% exec%" -jar post.jar – Bil

+0

@Bil guten Fang sein. Bearbeitet. – Stephan

+0

danke @Stephan :) – Bil

0

Wildcards are supported by only some commands. Außerdem schränkt cmd Platzhalter in einem Dateipfad nur in einem Pfad Blatt dh in Token hinter letzte Backslash ...

Auf einem unbekannt Windows-System: Wenn Sie die Kontrolle über Umgebungsvariablen nicht, dann haben Sie müssen finden ein Dateipfad z Sie wie folgt vor (beachten Sie die _checkPath variable Zuordnung geändert wird angemessene Ausgabe zu erhalten, wie ich java noch nicht installiert haben):

@ECHO OFF 
SETLOCAL EnableExtensions DisableDelayedExpansion 
    rem assign path with a wildcard * not in path leaf 
set "_checkPath=C:\Program Files\Java\jre*\bin\javaw.exe" 
    rem delete or comment-up next line i.e. my test data  set "_checkPath=..." 
set "_checkPath=%ProgramFiles%*\Microsoft SQL Server\1*\LocalDB\Binn\sqlservr%1.exe" 
set "_itemFirst=" 
    rem previous line: delete variable; next line: show setting 
set _checkPath 
echo(--- 
    rem next two lines: ensure that a wildcard * not in path leaf is not allowed 
echo dir /B /S "%_checkPath%" 
dir /B /S "%_checkPath%" 
echo(--- 
    rem find all files by parsing powershell output (note proper escaping ^^^|) 
for /F "usebackq tokens= 1* delims=: " %%G in (` 
    powershell -C Get-ChildItem '"%_checkPath%"' -Recurse ^^^| Format-List -Property FullName 
    `) do (
     rem assign first found item 
    if not defined _itemFirst set "_itemFirst=%%~H" 
     rem assign every found item thus last found item 
    set "_item_Last=%%~H" 
     rem show every found item 
    echo .exe found %%~H 
) 
echo(--- 
    rem show setting found 
set _item 
echo(--- 
if defined _itemFirst (
    echo success: "%_checkPath%" 
     rem commands are merely ECHOed and (my test data) commented up 
     rem use found items (choose any) 
    rem ECHO "%_itemFirst%" -jar post.jar 
    rem ECHO "%_item_Last%" -jar post.jar 
) else (
    echo NOT FOUND "%_checkPath%" 
) 

Above-Code-Snippet ist reich kommentiert wo zum besseren Verständnis notwendig.
Ausgabe zeigt beide Varianten:

==> D:\bat\SO\38281447.bat XXX 
_checkPath=C:\Program Files*\Microsoft SQL Server\1*\LocalDB\Binn\sqlservrXXX.exe 
--- 
dir /B /S "C:\Program Files*\Microsoft SQL Server\1*\LocalDB\Binn\sqlservrXXX.exe" 
The filename, directory name or volume label syntax is incorrect. 
--- 
--- 
Environment variable _item not defined 
--- 
NOT FOUND "C:\Program Files*\Microsoft SQL Server\1*\LocalDB\Binn\sqlservrXXX.exe" 

==> D:\bat\SO\38281447.bat 
_checkPath=C:\Program Files*\Microsoft SQL Server\1*\LocalDB\Binn\sqlservr.exe 
--- 
dir /B /S "C:\Program Files*\Microsoft SQL Server\1*\LocalDB\Binn\sqlservr.exe" 
The filename, directory name or volume label syntax is incorrect. 
--- 
.exe found C:\Program Files\Microsoft SQL Server\100\LocalDB\Binn\sqlservr.exe 
.exe found C:\Program Files\Microsoft SQL Server\110\LocalDB\Binn\sqlservr.exe 
.exe found C:\Program Files\Microsoft SQL Server\120\LocalDB\Binn\sqlservr.exe 
--- 
_itemFirst=C:\Program Files\Microsoft SQL Server\100\LocalDB\Binn\sqlservr.exe 
_item_Last=C:\Program Files\Microsoft SQL Server\120\LocalDB\Binn\sqlservr.exe 
--- 
success: "C:\Program Files*\Microsoft SQL Server\1*\LocalDB\Binn\sqlservr.exe" 

==>