我正在尝试将多个文件连接成两个单独的文件。
第一个文件将是文件名中“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 (
...也不想工作。那么如何连接不包含括号内的文件?
答案 0 :(得分: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
)
答案 1 :(得分:0)
如何使用find:
for /F %%a in ('dir /b *.txt') do (
echo %%a | find /V "bob")
这应该返回所有没有“bob”的.txt文件。
答案 2 :(得分: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
命令或/?
开关for
或findstr
获取更多信息。
我清除了分隔符(delims=
)以允许文件名中的空格。