2011-05-09 179 views
1

我試圖將多個文件連接成兩個單獨的文件。批處理 - 反轉/反轉FOR循環?

的第一個文件將是其他所有文件的串聯與文件名「鮑勃」。第二個文件將是文件名中沒有「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 %%a !(*bob*.txt) do (

...不想工作,要麼。那麼如何連接不包含圓括號內的文件?

回答

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 
) 
0

有關使用查找如何:

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

這應返回沒有「鮑勃」的所有.txt文件他們。

+0

這對於這個具體的例子能正常工作,但如果搜索字符串是什麼FOO *酒吧* baz.txt還是B?b.txt – Anders 2011-05-09 21:33:47

+0

@Anders,likso答案OP的問題。 – 2011-05-10 15:15:34

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=),以允許在文件名中的空格。

+0

只需使用模式'FOO *酒吧*巴茲\ .txt'或'b.b \ .txt'匹配文件搜索'FOO *酒吧* baz.txt'或'b b.txt':?] – mousio 2011-05-10 00:56:17