%% f em um arquivo em lotes com o Windows 7 Professional de 64 bits

0

Eu tenho uma linha como a seguinte em vários arquivos de lote:

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

Eu os usei por um longo tempo sem problemas. Eu recentemente tive que substituir o meu disco rígido e tinha o Windows 7 reinstalado, assim como era antes, tanto quanto eu sei. Agora, quando executo qualquer um dos arquivos em lote com esse tipo de linha, eles não estão pré-processando o "% *". Então, para algo como "XXX.bat * .txt" eu recebo:

Não é possível abrir o arquivo de entrada "* .txt"

Estou executando o Windows 7 como uma máquina virtual no Parallels, atualizado da versão 8 para a 10, se isso fizer diferença. Eles também atualizaram meu Mac OS do Mountain Lion para o Yosemite.

Ainda mais estranho, esse pequeno arquivo em lotes funciona bem:

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

Mas este dá a mensagem que não consegue encontrar t? (onde t? deve analisar para t1, t2 e t3):

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

Eu tentei adicionar o "início" a ele, os mesmos resultados.

Talvez uma maneira mais simples de dizer isso seja:

Isso funciona:

af2 2014A 2014B 2014C

Mas isso:

af2 2014?

apresenta um erro ao tentar acessar um arquivo chamado "2014?"

E af2 chama, para cada arquivo, um programa que eu escrevi e usei por mais de 20 anos, que apenas fornece algumas estatísticas em um arquivo.

    
por Gene 06.05.2015 / 18:49

2 respostas

0

As extensões de comando estão desativadas por algum motivo. As extensões de comando envolvem alterações sérias nos argumentos da Linha de Comando (Parâmetros) , como por CALL /? .

No entanto, o próximo trecho de CMD /? mostra algumas dicas de solução:

Command Extensions are enabled by default. You may also disable extensions for a particular invocation by using the /E:OFF switch. You can enable or disable extensions for all invocations of CMD.EXE on a machine and/or user logon session by setting either or both of the following REG_DWORD values in the registry using REGEDIT.EXE:

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions

and/or

HKEY_CURRENT_USER\Software\Microsoft\Command Processor\EnableExtensions

to either 0x1 or 0x0. The user specific setting takes precedence over the machine setting. The command line switches take precedence over the registry settings.

In a batch file, the SETLOCAL ENABLEEXTENSIONS or DISABLEEXTENSIONS arguments takes precedence over the /E:ON or /E:OFF switch. See SETLOCAL /? for details.

Exemplo

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

==>
    
por 08.05.2015 / 12:23
0

Eu descobri o problema. Eu tenho uma pasta na minha área de trabalho com um monte de arquivos .exe neles de programas que escrevi. Também possui uma pasta com alguns arquivos .bat. Em muitos casos, o arquivo .bat chama um dos arquivos .exe que tem o mesmo nome raiz (af2.bat chama af2.exe). Isso funciona bem SE a pasta com os arquivos .bat nela precede a outra pasta na variável PATH, o que ela fez na minha instalação anterior (e agora se faz nessa).

Só tenho que amar esses pequenos problemas sutis.

Obrigado por toda a entrada. :)

    
por 08.05.2015 / 18:59