0

私は次の行に沿って何かをしたい:

for %%i not in (*.xml *.doc) do ....

明らかに、それはうまくいきません。バッチファイルで同様のことを行う方法はありますか?

4

2 に答える 2

2
for /f "eol=: delims=" %%i in ('dir /b /a-d *^|findstr /live ".bat .txt"') do ...

補遺

このソリューションは、ディレクトリ リストが膨大になると、非線形的に速度が低下します。これが単一のディレクトリで問題になることはほとんどありませんが、DIR /S オプションを使用すると簡単に問題になる可能性があります。このソリューションは、一時ファイルを使用することで、リストのサイズに対して線形の応答時間を持つように復元できます。

set temp1="%temp%\dirExclude1_%random%.txt"
set temp2="%temp%\dirExclude2_%random%.txt"
>%temp1% dir /s /b /a-d *
>%temp2% findstr /live ".bat .txt" %temp1%
for /f "usebackq eol=: delims=" %%i in (%temp2%) do ...
del %temp1%
del %temp2%

これは、Windows パイプの一般的な制限です。大量のデータでは非常に非効率的になります。大量のデータを処理する場合は、パイプの代わりに一時ファイルを使用する方が常に高速です。

于 2012-04-12T02:05:01.407 に答える
1
@echo off
setlocal EnableDelayedExpansion
rem Build a list of files to exclude
set exclude=
for %%i in (*.xml *.doc) do set "exclude=!exclude!%%i*"
rem Process all but excluded files
for %%i in (*.*) do (
   if "!exclude!" equ "!exclude:%%i*=!" echo Process this one: %%i
)
于 2012-04-12T00:05:20.850 に答える