2017-05-18 6 views
0

Also was ich versuche, ist, jedes Zeichen in einer Zeichenfolge außer dem ersten in einem Parameter zu entfernen.Abrufen des ersten Zeichens von Parameter/String

This is the closest I've found so far aber es funktioniert nicht auf die gleiche Weise.

C:\vbackup.bat test e: c:\temp

@echo off 

IF /I NOT "%2" == "c:" (
    :echo %%2:~0,1%  // I personally prefer this since it will only be used once 

    :: Test 
    SET var=%2 
    SET var2=%var:~0,1% 
    CALL :show "0,1" 
    echo. 
    echo Backing up entire %2 to %3\%1 

    echo. 
    pause 
    exit 
) 

:show 
echo Test : var=%var% var2=%var2% 
GOTO :eof 

Ergebnis:

Test : var=e: var2=~0,1

+0

Ich empfehle, ein Eingabeaufforderungsfenster zu öffnen und zuerst 'call /?' Auszuführen. Die Ausgabehilfe, die auf mehreren Fensterseiten angezeigt wird, erklärt, wie auf Batchdateiargumente ohne oder mit Modifikatoren wie '% ~ d2' referenziert wird, die so erweitert werden, dass sie nur den Buchstaben des zweiten Arguments übernehmen, was für Ihr Beispiel' E: 'ist. Klicken Sie anschließend im Eingabeaufforderungsfenster auf set/?, und lesen Sie das Kapitel über [verzögerte Erweiterung] (http://ss64.com/nt/delayedexpansion.html), das Sie hier benötigen, wenn Sie innerhalb eines Befehls eine Umgebungsvariable definieren blockieren und auf den Wert dieser Umgebungsvariablen im selben Block zugreifen wollen. – Mofi

+0

Sie benötigen eine normale Umgebungsvariable für die [Sub-String-Erweiterung] (http://ss64.com/nt/syntax-substring.html), sie kann nicht für Argumentverweise wie '% 2' verwendet werden. Wenn Sie eine Variable in einem einzelnen Codeblock ändern und lesen, benötigen Sie [verzögerte Erweiterung] (http://ss64.com/nt/delayedexpansion.html). – aschipfl

Antwort

0

Dies sollte funktionieren:

something.bat:

@ECHO OFF 
SETLOCAL EnableDelayedExpansion 
:LOOP 
IF NOT "%~1"=="" (
    SET firstChar=%1 
    SET firstChar=!firstChar:~0,1! 
    ECHO !firstChar! 
    SHIFT 
    GOTO LOOP 
) 

something.bat abc def ghi jkl Aufruf wird die Ausgabe generiert:

a 
d 
g 
j 

EDIT: Ersetzt [%1]==[] mit "%~1"=="" wie in den Kommentaren vorgeschlagen.

+1

Es ist besser, 'IF NOT"% ~ 1 "==" "' – npocmaka

+0

@npocmaka zu verwenden Dies funktioniert auch, aber warum ist 'IF NOT"% ~ 1 "==" "besser? – MichaelS

+0

'' und '' 'haben keine Bedeutung für den Windows-Befehlsinterpreter. Sie sind nur zwei Charaktere zu vergleichen. Aber ein doppeltes Zitat hat eine Bedeutung, weil es einen String definiert, der selbst dann als ein Argument interpretiert werden sollte, wenn ein Leerzeichen oder "&() [] {}^=;! '+,' ~ <> | '' Enthalten ist. Die doppelten Anführungszeichen werden ebenfalls mit __IF__ verglichen. Erstellen Sie eine Batch-Datei mit der ersten Zeile "IF NOT"% ~ 1 "==" "(echo wahr) else (echo false)' und zweite Zeile 'IF NOT [% 1] == [] (echo true) else (echo false) 'und dritte Zeile' echo Finished'. Als nächstes öffnen Sie ein Eingabeaufforderungsfenster und führen Sie die Batch-Datei mit einem einfachen Anführungszeichen als Parameter aus. – Mofi

Verwandte Themen