2017-03-15 6 views
0

Ich wurde beauftragt, Installationsskripts für meine Firma zu schreiben, die Druckertreiber auf einem Benutzercomputer installieren können.Den letzten Namen eines Verzeichnispfads im Stapel abrufen

Was ich bis jetzt getan habe ist, habe ich das Skript einen Parameter akzeptieren (der Druckertyp Bruder, Xerox, etc ..) von dort wird es den relativen Pfad zu den Treibern sammeln, und einen forfiles Befehl ausführen Der Pfad gibt alle Treiber aus, danach wird der Benutzer nach dem korrekten Treiber gefragt, der vom Netzwerklaufwerk auf den Desktop des Benutzers kopiert wird, und es wird ausgeführt.

Was ich tun muss, ist das laufende Teil, ich muss den Treiber auf den Desktop kopieren und irgendwie den letzten Verzeichnis Teil (Beispiel: user\desktop\test.exe Ich muss den letzten Teil test.exe sammeln) Wie kann ich darüber gehen, dies zu tun funktional?

Grundsätzlich müsste ich den Pfad durch \ teilen und den letzten Eintrag dieser Liste greifen, ist das im Batch möglich?

@echo off 

type banner.txt 

if [%1]==[] goto usage 

:verify_argv 
    IF '%1'=='canon' GOTO get_canon_path 
    IF '%1'=='xerox' GOTO get_xerox_path 
    IF '%1'=='hp' GOTO get_hp_path 
    IF '%1'=='dell' GOTO get_dell_path 
    IF '%1'=='brother' GOTO get_brother_path 
    goto :eof 

:get_canon_path 
    set dir_path=\\mgtutils01\windows7apps\PRINTERS\Canon 
    goto :install_drivers 

:get_xerox_path 
    set dir_path=\\mgtutils01\windows7apps\PRINTERS\Xerox 
    goto :install_drivers 

:get_hp_path 
    set dir_path=\\mgtutils01\windows7apps\PRINTERS\HP 
    goto :install_drivers 

:get_dell_path 
    set dir_path=\\mgtutils01\windows7apps\PRINTERS\Dell 
    goto :install_drivers 

:get_brother_path 
    set dir_path=\\mgtutils01\windows7apps\Brother\Drivers 
    goto :install_drivers 

:usage 
    @echo Usage: .\driver [PRINTER_TYPE] 
    exit /B 1 

:install_drivers 
    @echo Finding drivers... 
    pushd "%dir_path%" 
    forfiles /s /m *.exe /c "cmd /c echo @relpath" 
    set /p to_install="Copy the path of the correct driver and paste here: " 
    @echo Copying file to %USERPROFILE%, please wait.. 
    xcopy %to_install% "%USERPROFILE%\Desktop" 
    @echo Installing driver.. 
    pushd "%USERPROFILE%\Desktop" 
+1

Keine Notwendigkeit für 'FORFILES'. Ein normaler FOR-Befehl mit der Option/R wird schneller ausgeführt. – Squashman

+0

Es scheint, als wäre es einfacher und sauberer, nur den Pfad zum Treiber innerhalb der Ausführung des 'IF' Befehls zu setzen. 'IF '% 1' == 'canon' gesetzt dir_path = \\ mgtutils01 \ windows7apps \ DRUCKER \ Canon' – Squashman

+0

Und Sie könnten in Betracht ziehen, Ihre String-Vergleiche mit der Option'/I' ohne Berücksichtigung der Groß-/Kleinschreibung zu machen. – Squashman

Antwort

1

Um das letzte Element einer Datei oder Verzeichnispfad zu erhalten, können Sie:

  1. entweder eine for loop und seine ~ Modifikatoren verwenden:

    set "ITEM=user\desktop\test.exe" 
    for %%I in ("%ITEM%") do set "NAME=%%~nxI" 
    echo %NAME% 
    
  2. oder Anruf eine Unterroutine von call command, übergeben Sie den Pfad als Argument und verwenden Sie erneut ~ mo difiers:

    set "ITEM=user\desktop\test.exe" 
    call :SUB "%ITEM%" 
    goto :EOF 
    
    :SUB 
    set "NAME=%~nx1" 
    goto :EOF 
    

für beiden Varianten, extrahiert der ~nx Teil den Basisnamen (n) und die Verlängerung (x) vom letzten Elemente des Pfades in der Referenz gespeichert (%%I oder %1). Geben Sie for /? und call /? in ein Eingabeaufforderungsfenster ein und lesen Sie die Hilfetexte. Sie finden alle möglichen ~ Modifikatoren von for Variablenreferenzen bzw. Argumentreferenzen.

Verwandte Themen