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? が見つからないというメッセージが表示されます (t? は t1、t2、および t3 に解析されるはずです)。

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

そして、それに「start」を追加してみましたが、結果は同じでした。

もっと簡単に言うと次のようになります。

これは機能します:

af2 2014A 2014B 2014C

しかしこれは:

af2 2014?

「2014?」というファイルにアクセスしようとするとエラーが発生します。

そして、af2 は、ファイルごとに、私が作成し、20 年以上使用してきた、ファイルに関するいくつかの統計情報を提供するプログラムを呼び出します。

答え1

コマンド拡張は何らかの理由で無効になっています。コマンド拡張は、コマンドライン引数(パラメータ)に従ってCALL /?

ただし、次の抜粋にはCMD /?いくつかの解決のヒントが示されています。

コマンド拡張機能は、デフォルトで有効になっています。スイッチを使用して、特定の呼び出しに対して拡張機能を無効にすることもできます。を使用してレジストリで 次のいずれかまたは両方の値を設定すると、マシンおよび/またはユーザー ログオン セッション上の の/E:OFFすべての呼び出しに対して拡張機能を有効または無効にできます。CMD.EXEREG_DWORDREGEDIT.EXE

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions

および/または

HKEY_CURRENT_USER\Software\Microsoft\Command Processor\EnableExtensions

0x1またはのいずれかに設定します0x0。ユーザー固有の設定はマシンの設定よりも優先されます。コマンド ライン スイッチはレジストリ設定よりも優先されます。

バッチ ファイルでは、SETLOCAL ENABLEEXTENSIONSor 引数がor スイッチ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 ファイルの 1 つを呼び出します (af2.bat は af2.exe を呼び出します)。これで問題なく動作します。もし.bat ファイルを含むフォルダーは、PATH 変数内の他のフォルダーよりも前になります。これは、以前のインストールでもそうでした (そして、今回のインストールでもそうです)。

そういう微妙な小さな問題を愛さなければなりません。

ご意見ありがとうございました。:)

関連情報