Windows 7 Professional 64비트 배치 파일의 %%f

Windows 7 Professional 64비트 배치 파일의 %%f

여러 배치 파일에 다음과 같은 줄이 있습니다.

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

나는 문제없이 오랫동안 사용했습니다. 최근에 하드 드라이브를 교체해야 했고, 제가 아는 한 이전과 마찬가지로 Windows 7을 다시 설치했습니다. 이제 이런 종류의 줄이 포함된 배치 파일을 실행하면 "%*"가 사전 처리되지 않습니다. 따라서 "XXX.bat *.txt"와 같은 경우 다음을 얻습니다.

입력 파일 "*.txt"를 열 수 없습니다.

저는 Parallels에서 Windows 7을 가상 머신으로 실행하고 있으며 버전 8에서 10으로 업그레이드했습니다. 그들은 또한 내 Mac OS를 Mountain Lion에서 Yosemite로 업그레이드했습니다.

더욱 이상한 점은 이 작은 배치 파일이 잘 작동한다는 것입니다.

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

하지만 이것은 찾을 수 없다는 메시지를 제공합니다. (여기서 t?는 t1, t2 및 t3으로 구문 분석되어야 합니다):

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

그리고 여기에 "시작"을 추가해 보았지만 결과는 같았습니다.

아마도 더 간단하게 말하면 다음과 같습니다.

이것은 작동합니다:

af2 2014A 2014B 2014C

하지만 이것은:

af2 2014?

"2014?"라는 파일에 액세스하려고 하면 오류가 발생합니다.

그리고 af2는 각 파일에 대해 제가 작성하고 20년 이상 사용해 온 프로그램을 호출하여 파일에 대한 몇 가지 통계만 제공합니다.

답변1

어떤 이유로 명령 확장이 비활성화되었습니다. 명령 확장에는 다음에 대한 심각한 변경이 포함됩니다.명령줄 인수(Parameters)에 따라 CALL /?.

그러나 다음 발췌문에서는 CMD /?몇 가지 해결 방법 힌트를 보여줍니다.

명령 확장은 기본적으로 활성화되어 있습니다. 스위치 를 사용하여 특정 호출에 대한 확장을 비활성화할 수도 있습니다 /E:OFF. 다음 을 사용하여 레지스트리에서 CMD.EXE 다음 값 중 하나 또는 둘 다를 설정하여 컴퓨터 및/또는 사용자 로그온 세션 의 모든 호출에 대해 확장을 활성화하거나 비활성화할 수 있습니다 .REG_DWORDREGEDIT.EXE

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions

및/또는

HKEY_CURRENT_USER\Software\Microsoft\Command Processor\EnableExtensions

또는 .0x10x0사용자별 설정은 기기 설정보다 우선합니다. 명령줄 스위치는 레지스트리 설정보다 우선합니다.

배치 파일에서는 SETLOCAL ENABLEEXTENSIONS또는 인수가 또는 스위치 DISABLEEXTENSIONS보다 우선합니다 . 자세한 내용은 참조하세요 ./E:ON/E:OFFSETLOCAL /?

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

==>

답변2

나는 문제를 알아 냈습니다. 내 데스크탑에는 내가 작성한 프로그램의 .exe 파일이 들어 있는 폴더가 있습니다. 또한 일부 .bat 파일이 포함된 폴더도 있습니다. 대부분의 경우 .bat 파일은 루트 이름이 동일한 .exe 파일 중 하나를 호출합니다(af2.bat는 af2.exe를 호출함). 잘 작동해요만약에.bat 파일이 있는 폴더는 이전 설치에서 수행했던 PATH 변수의 다른 폴더보다 앞에 있습니다(이제 이 폴더에서도 수행됩니다).

그 미묘한 작은 문제를 좋아해야합니다.

모든 의견을 보내주셔서 감사합니다. :)

관련 정보