1

我正在尝试将许多文件连接成两个单独的文件。

第一个文件将是文件名中带有“bob”的所有其他文件的串联。第二个文件将是文件名中没有“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%)

但是,第二个 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和正则表达式*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 回答
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 回答