0

コードは次のとおりです。

setlocal EnableDelayedExpansion
FOR /f "usebackq tokens=*" %%X in (`dir /a-d /s /b "!search_path!" 2^>^&1`) DO @(
  set file_path=%%X
  rem do other stuff
)

ソース パスにバッククォート、パーセンテージ、感嘆符、^ エスケープ記号などの特殊文字が含まれている可能性があるため、遅延展開がオンになっています。これらの文字はすべて Windows パスで使用できますが、それらが存在するかどうか、どこに存在するかはわかりません。ダブル パーセント パラメータ %%X をどうするか、展開せずに別の変数に渡す方法が問題になります。DE がオンの場合、感嘆符は変数として扱われ、さまざまな奇妙なエラーが発生します。同じことは、DE を無効にした場合です。同じ状況ですが、今回はパーセンテージです。

どんなに奇妙な文字でも、Windowsシステムで見つけることができるすべての許可されたパスに対してこれらの行を安全にする方法はありますか?

問題は、パラメーターのダブル パーセントからノーマルにデータを安全に渡す方法に要約され%variable%、その瞬間からデータが遅延拡張を安全に通過できるようになります。

4

1 に答える 1

1

FOR /R私はあなたのニーズに適応しようとします。ループ内とdir.

FOR /Rディレクトリ ツリーを走査し (とにかく実行している)、指定したパターンに一致するファイルを返します。

ディレクトリ内のタイプ TXT のすべてのファイルとそのサブディレクトリを一覧表示する簡単な例は、次のようになります。

更新しました:

これは、感嘆符を含むディレクトリ内の 2 つのファイルの内容を出力します。

@echo off
for /r %%i in (ex*!*.txt) do (
   type %%~i
)

遅延変数展開がないことに注意してください。追加の変数参照は、for /?リストの一番下にあります。

于 2012-05-12T14:57:33.460 に答える