2016-11-25 2 views
1

Dies ist Code: - "R war unerwartet zu diesem Zeitpunkt"Fehler bei der Verwendung von BAT-Dateien. - R war unerwartet zu diesem Zeitpunkt

call n:\xxx\xxx\variables.bat %1 %2 %3 %4 %5 %6 

set yourZipPassword=%xxx% 
set yourFolderPath="n:\xxxx\xxxx\%xxxx%" 

for /R "%yourFolderPath%" %%I in ("*.zip") do (
    "C:\Program Files\7-Zip\7z.exe" x -p%yourZipPassword% -y -o"%%~dpI" "%%~fI" 
) 

Sie wissen nicht, was mit diesem Fehler zu tun

Und diese Fledermaus Datei auf dieser Linie fest und nicht mehr verarbeiten:

for /R "%yourFolderPath%" %%I in ("*.zip") do (
+0

@aschipfl bitte überprüfen Sie meine Zusatzfrage, wenn Sie die Antwort kennen. (Kann alle 90 Minuten posten, aber brauche jetzt Hilfe.) – Denis

+0

Bitte * nie * verschiedene Fragen zu bestehenden Frage-Posts hinzufügen, da dies alle aktuellen Antworten unvollständig oder sogar veraltet macht! Schreiben Sie sie immer als * neue Frage *! Wie auch immer, es gibt keine schnelle Antwort für die neue Ausgabe, wie es für den ursprünglichen Post gab; Sie müssen genau definieren, wie der BLABLA-Teil extrahiert werden kann, und Sie müssen einige eigene Anstrengungen zeigen. es gibt bereits viele Posts für eine [ähnliche Aufgabe] (http://stackoverflow.com/search?q=%5Batch-file%5D+file+rename) ... – aschipfl

+0

@aschipfl Ok, ich werde nicht) – Denis

Antwort

4

ändern der set Syntax von ...:

set yourFolderPath="n:\xxxx\xxxx\%xxxx%" 

... auf den folgenden (in der Regel):

set "yourFolderPath=n:\xxxx\xxxx\%xxxx%" 

So die Anführungszeichen sind nicht mehr Teil des Wertes. Wie Sie es in Ihrer Frage haben, erhält die for /R Schleife (for /R "%yourFolderPath%") einen Root-Pfad wie for /R ""n:\xxxx\xxxx\%xxxx%"", so dass es "übernotiert" ist. Dies stellt insbesondere dann ein Problem dar, wenn in dem Variablenwert Leerstellen und/oder Sonderzeichen enthalten sind.


Die veränderte set Syntax noch einen weiteren Vorteil erhalten hat: Stellen Sie sich vor Sie eine Variable haben einen Verzeichnispfad und eine andere, die eine Dateinamen hält, mit der Syntax aus Ihrer Frage:

set PDIR="D:\Data" 
set FILE="file.ext" 

Jetzt uns lassen verketten diese Werte:

echo unquoted: %PDIR%\%FILE% 
echo quoted: "%PDIR%\%FILE%" 

Die zurückgegebenen Zeilen waren:

unquoted: "D:\Data"\"file.ext" 
quoted: ""D:\Data"\"file.ext"" 

Sie können sehen, dass es einige beunruhigende Zitate gibt. Lassen Sie uns nun die geänderte Syntax:

set "PDIR=D:\Data" 
set "FILE=file.ext" 

echo unquoted: %PDIR%\%FILE% 
echo quoted: "%PDIR%\%FILE%" 

So die zurückgegebenen Zeilen waren:

unquoted: D:\Data\file.ext 
quoted: "D:\Data\file.ext" 

So gibt es nicht mehr störend Zitate.


Beachten Sie, dass die geänderte Syntax funktioniert nur mit command extensions enabled, aber dies ist die Standardeinstellung für die Windows-Eingabeaufforderung cmd sowieso.

Verwandte Themen