У меня есть такая строка в нескольких пакетных файлах:

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

Я использовал их в течение длительного времени без проблем. Мне недавно пришлось заменить мой жесткий диск, и, насколько я знаю, была переустановлена Windows 7, как и прежде. Теперь, когда я запускаю какой-либо пакетный файл с такой строкой, он не обрабатывает «% *». Так что для чего-то вроде "XXX.bat * .txt" я получаю:

Невозможно открыть входной файл "* .txt"

Я использую Windows 7 как виртуальную машину в Parallels, обновленную с версии 8 до 10, если это имеет значение. Они также обновили мою Mac OS с Mountain Lion до Yosemite.

Еще более странно, что этот маленький командный файл отлично работает:

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

Но этот дает сообщение, которое не может найти т? (где т? следует разобрать на t1, t2 и t3):

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

И я попытался добавить "начало" к нему, те же результаты.

Может быть, более простой способ сказать это:

Это работает:

af2 2014A 2014B 2014C

Но это:

af2 2014?

выдает ошибку при попытке доступа к файлу с именем "2014?"

И af2 вызывает для каждого файла программу, которую я написал и использовал более 20 лет, которая дает лишь небольшую статистику по файлу.

2 ответа2

0

Я понял проблему. У меня на рабочем столе есть папка с кучей файлов .exe из программ, которые я написал. В нем также есть папка с некоторыми файлами .bat. Во многих случаях файл .bat вызывает один из файлов .exe с тем же корневым именем (af2.bat вызывает af2.exe). Это хорошо работает, если папка с файлами .bat в ней предшествует другой папке в переменной PATH, что она делала в моей предыдущей установке (и теперь делает на этой).

Просто надо любить эти тонкие маленькие проблемы.

Спасибо за весь вклад. :)

0

Расширения команд по какой-то причине отключены. Расширения команд включают серьезные изменения в аргументах командной строки (параметры) в соответствии с CALL /? ,

Тем не менее, следующий отрывок из CMD /? показывает некоторые подсказки решения:

Расширения команд включены по умолчанию. Вы также можете отключить расширения для определенного вызова с помощью переключателя /E:OFF . Вы можете включить или отключить расширения для всех вызовов CMD.EXE на компьютере и / или в сеансе входа пользователя, установив одно или оба из следующих значений REG_DWORD в реестре с помощью REGEDIT.EXE:

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions

и / или

HKEY_CURRENT_USER\Software\Microsoft\Command Processor\EnableExtensions

либо 0x1 либо 0x0 . Пользовательские настройки имеют приоритет над настройками машины. Ключи командной строки имеют приоритет над параметрами реестра.

В пакетном файле аргументы SETLOCAL ENABLEEXTENSIONS или DISABLEEXTENSIONS имеют приоритет перед ключом /E:ON или /E:OFF . Смотрите SETLOCAL /? для деталей.

пример

==>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

==>

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .