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 作業系統從 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

由於某種原因命令擴充被禁用。命令擴充涉及重大更改命令列參數(參數)按照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 ENABLEEXTENSIONSDISABLEEXTENSIONS參數優先於/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

==>

答案2

我解決了這個問題。我的桌面上有一個資料夾,其中包含我編寫的程式中的一堆 .exe 檔案。它還有一個資料夾,其中包含一些 .bat 檔案。在許多情況下,.bat 檔案會呼叫具有相同根名稱的 .exe 檔案之一(af2.bat 呼叫 af2.exe)。效果很好如果其中包含 .bat 檔案的資料夾位於 PATH 變數中的其他資料夾之前,這在我之前的安裝中是這樣做的(現在在這個安裝中也是如此)。

只是一定要喜歡那些微妙的小問題。

感謝所有的投入。 :)

相關內容