%%f en un archivo por lotes con Windows 7 Professional de 64 bits

%%f en un archivo por lotes con Windows 7 Professional de 64 bits

Tengo una línea como la siguiente en varios archivos por lotes:

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

Los uso desde hace mucho tiempo sin problema. Recientemente tuve que reemplazar mi disco duro y, hasta donde yo sé, reinstalé Windows 7 tal como estaba antes. Ahora, cuando ejecuto cualquiera de los archivos por lotes que contienen este tipo de línea, no procesan previamente el "%*". Entonces, para algo como "XXX.bat *.txt" obtengo:

No se puede abrir el archivo de entrada "*.txt"

Estoy ejecutando Windows 7 como máquina virtual en Parallels, actualizado de la versión 8 a la 10, si eso hace la diferencia. También actualizaron mi sistema operativo Mac de Mountain Lion a Yosemite.

Aún más extraño, este pequeño archivo por lotes funciona bien:

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

¿Pero éste da el mensaje de que no puede encontrarlo? (donde t? debería analizarse en t1, t2 y t3):

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

E intenté agregarle el "inicio", mismos resultados.

Quizás una forma más sencilla de decirlo sea:

Esto funciona:

af2 2014A 2014B 2014C

Pero esto:

af2 2014?

da un error al intentar acceder a un archivo llamado "¿2014?"

Y af2 llama, para cada archivo, a un programa que escribí y he usado durante más de 20 años y que solo brinda algunas estadísticas sobre un archivo.

Respuesta1

Las extensiones de comando están deshabilitadas por algún motivo. Las extensiones de comando implican cambios serios enArgumentos de la línea de comando (parámetros)según CALL /?.

Sin embargo, el siguiente extracto CMD /?muestra algunas sugerencias de solución:

Las extensiones de comando están habilitadas de forma predeterminada. También puede deshabilitar extensiones para una invocación particular usando el /E:OFFinterruptor. Puede habilitar o deshabilitar extensiones para todas las invocaciones CMD.EXE en una máquina y/o sesión de inicio de sesión de usuario configurando uno o ambos de los siguientes REG_DWORDvalores en el registro usando REGEDIT.EXE:

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions

y/o

HKEY_CURRENT_USER\Software\Microsoft\Command Processor\EnableExtensions

a cualquiera 0x1o 0x0. La configuración específica del usuario tiene prioridad sobre la configuración de la máquina. Los modificadores de la línea de comando tienen prioridad sobre la configuración del registro.

En un archivo por lotes, los argumentos SETLOCAL ENABLEEXTENSIONSo DISABLEEXTENSIONStienen prioridad sobre el modificador /E:ONo /E:OFF. Ver SETLOCAL /?para más detalles.

Ejemplo

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

==>

Respuesta2

Resolví el problema. Tengo una carpeta en mi escritorio con un montón de archivos .exe de programas que he escrito. También tiene una carpeta con algunos archivos .bat. En muchos casos, el archivo .bat llama a uno de los archivos .exe que tiene el mismo nombre raíz (af2.bat llama a af2.exe). eso funciona bienSIla carpeta con los archivos .bat precede a la otra carpeta en la variable PATH, lo que hizo en mi instalación anterior (y ahora en esta).

Sólo tengo que amar esos pequeños problemas sutiles.

Gracias por todos los aportes. :)

información relacionada