1

多くのファイルを2つの個別のファイルに連結しようとしています。

最初のファイルは、ファイル名に「bob」が含まれる他のすべてのファイルを連結したものになります。2番目のファイルは、ファイル名に「bob」が含まれていないすべてのファイルを連結したものになります。両方のファイルは、実際に連結を行う前にファイルの名前を出力します。

これが私がこれまでに持っているものです:

            @echo off
            setlocal EnableDelayedExpansion
            set bob=All_bob.txt
            set jimmy=All_jimmy.txt

            if exist %bob% del %bob%
            if exist %jimmy% del %jimmy%

            for %%a in (*bob*.txt) do (
            echo /* >>%bob%
            echo * %%a >>%bob%
            echo */ >>%bob%
            copy/b %bob%+"%%a" %bob%
            echo. >>%bob%
            echo. >>%bob%)


            for %%a not in (*bob*.txt) do (
            echo /* >>%jimmy%
            echo * %%a >>%jimmy%
            echo */ >>%jimmy%
            copy/b %jimmy%+"%%a" %jimmy%
            echo. >>%jimmy%
            echo. >>%jimmy%)

ただし、2番目のFORループ(下部)は、「not」を使用して、このような感嘆符を使用して、うまく再生したくありません...

            for %%a !(*bob*.txt) do (

...働きたくない。では、括弧内にあるものを含まないファイルを連結するにはどうすればよいですか?

4

3 に答える 3

0

検索を使用するのはどうですか:

for /F %%a in ('dir /b *.txt') do (
echo %%a | find /V "bob")

これにより、「bob」を含まないすべての .txt ファイルが返されます。

于 2011-05-09T19:52:17.577 に答える
0

これに対する明確な解決策はないと思います。

おそらく FINDSTR を使用して %%a をフィルタリングできますが、それ*bob*.txtには正規表現に変換する必要があり、おそらく自動化は容易ではありません。

別の (醜い) 解決策は、ネストされたループを使用することです。

echo bob:
for %%a in (*bob*.txt) do (
    echo %%a
)

echo not bob:
for %%a in (*) do (
    setlocal ENABLEDELAYEDEXPANSION&set inc=1
    for %%b in (*bob*.txt) do if "%%~a"=="%%~b" set inc=0
    if "!inc!"=="1" echo %%a
    endlocal
)
于 2011-05-09T19:46:11.447 に答える
0

findstrと の正規表現の使用*bob*.txt:

for /f "usebackq delims=" %%a in (`dir /b ^| findstr ".*bob.*\.txt"`) do (…)

/Vスイッチを使用して、他のすべてのファイルを処理します。

for /f "usebackq delims=" %%a in (`dir /b ^| findstr /v ".*bob.*\.txt"`) do (…)

help詳細については、コマンドまたはスイッチ/?を使用できます。ファイル名にスペースを使用できるように 、区切り文字 ( ) をクリアしました。forfindstr
delims=

于 2011-05-10T00:54:14.193 に答える