%%f in einer Batchdatei mit Windows 7 Professional 64 Bit

%%f in einer Batchdatei mit Windows 7 Professional 64 Bit

In mehreren meiner Batchdateien befindet sich eine Zeile wie die folgende:

FOR %%f IN (%*) DO something.exe %%f

Ich habe sie lange Zeit ohne Probleme verwendet. Ich musste kürzlich meine Festplatte austauschen und Windows 7, soweit ich weiß, genauso neu installieren, wie es vorher war. Wenn ich jetzt eine der Batchdateien mit einer solchen Zeile ausführe, wird das „%*“ nicht vorverarbeitet. Für etwas wie „XXX.bat *.txt“ erhalte ich also:

Eingabedatei „*.txt“ kann nicht geöffnet werden

Ich verwende Windows 7 als virtuelle Maschine in Parallels, aktualisiert von Version 8 auf 10, falls das einen Unterschied macht. Sie haben auch mein Mac OS von Mountain Lion auf Yosemite aktualisiert.

Noch seltsamer ist, dass diese kleine Batchdatei einwandfrei funktioniert:

@ECHO off
FOR %%f IN (%*) DO start gvim %%f

Dieses hier gibt jedoch die Meldung aus, dass es t? nicht finden kann (wobei t? in t1, t2 und t3 zerlegt werden sollte):

@ECHO off
FOR %%f IN (%*) DO af2.exe %%f

Und ich habe versucht, „Start“ hinzuzufügen, mit dem gleichen Ergebnis.

Vielleicht kann man es einfacher so ausdrücken:

Das funktioniert:

af2 2014A 2014B 2014C

Aber dieses:

af2 2014?

gibt einen Fehler aus beim Versuch, auf eine Datei mit dem Namen „2014?“ zuzugreifen.

Und af2 ruft für jede Datei ein Programm auf, das ich geschrieben habe und seit über 20 Jahren verwende, das nur ein paar Statistiken zu einer Datei liefert.

Antwort1

Befehlserweiterungen sind aus irgendeinem Grund deaktiviert. Die Befehlserweiterungen beinhalten schwerwiegende Änderungen anBefehlszeilenargumente (Parameter)gemäß CALL /?.

Der nächste Auszug zeigt jedoch CMD /?einige Lösungshinweise:

Befehlserweiterungen sind standardmäßig aktiviert. Sie können Erweiterungen für einen bestimmten Aufruf auch deaktivieren, indem Sie den Schalter verwenden . Sie können Erweiterungen für alle Aufrufe auf einem Computer und/oder eine Benutzeranmeldesitzung /E:OFFaktivieren oder deaktivieren, indem Sie einen oder beide der folgenden Werte in der Registrierung festlegen :CMD.EXEREG_DWORDREGEDIT.EXE

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions

und/oder

HKEY_CURRENT_USER\Software\Microsoft\Command Processor\EnableExtensions

auf 0x1oder 0x0. Die benutzerspezifische Einstellung hat Vorrang vor der Computereinstellung. Die Befehlszeilenschalter haben Vorrang vor den Registrierungseinstellungen.

In einer Batchdatei haben die Argumente SETLOCAL ENABLEEXTENSIONS„oder“ DISABLEEXTENSIONSVorrang vor dem Schalter /E:ON„oder“ /E:OFF. SETLOCAL /?Weitere Einzelheiten finden Sie unter.

Beispiel

==>type D:\bat\cliParser.bat
@echo OFF >NUL
echo   all %%* = %*
set /A "ii=0"
:loopfor
  echo param %%%ii% = %0
  SHIFT
  set /A "ii+=1"
  if not [%0]==[] goto :loopfor
goto :eof

==>D:\bat\cliParser.bat aaa bbb
  all %* = aaa bbb
param %0 = D:\bat\cliParser.bat
param %1 = aaa
param %2 = bbb

==>cmd /E:OFF /C D:\bat\cliParser.bat aaa bbb
  all %* = *
The syntax of the command is incorrect.
param %3 = D:\bat\cliParser.bat
The syntax of the command is incorrect.
param %3 = aaa
The syntax of the command is incorrect.
param %3 = bbb
The syntax of the command is incorrect.
The system cannot find the batch label specified - eof

==>

Antwort2

Ich habe das Problem herausgefunden. Auf meinem Desktop befindet sich ein Ordner mit einer Reihe von .exe-Dateien aus Programmen, die ich geschrieben habe. Außerdem gibt es einen Ordner mit einigen .bat-Dateien. In vielen Fällen ruft die .bat-Datei eine der .exe-Dateien mit demselben Stammnamen auf (af2.bat ruft af2.exe auf). Das funktioniert einwandfrei.WENNder Ordner mit den darin enthaltenen .bat-Dateien steht vor dem anderen Ordner in der PATH-Variable, was bei meiner vorherigen Installation der Fall war (und jetzt auch bei dieser).

Man muss diese subtilen kleinen Probleme einfach lieben.

Danke für alle Beiträge. :)

verwandte Informationen