2014-05-05 45 views
1
@echo off 
set out=%~dp0\FileName.txt 
(for /r %~dp0 %%F in ((*System1*.txt*) | (*System2*.txt*)) do (if %%~zF GEQ 1 echo %%F)) > %out% 
exit /b 

我想用上面的批處理文件來查看批處理文件所在的目錄中包含某個字符串的文件,並且大小超過了0KB。Windows批處理腳本:正則表達式或語句

我遇到的問題是與OR語句。

+0

解釋一下。所有文件都超過零字節,你想用它們做什麼? – foxidrive

+0

Windows命令行沒有使用正則表達式的方式,因此您必須透露任務的詳細信息才能獲得適當的解決方案。 – foxidrive

+0

我希望所有大於0kb的文件都被寫入名爲FileName.txt的文本文件。 – dog2bert

回答

0

下面的批處理文件符合您的要求:

@echo off 
set out=%~dp0\FileName.txt 

rem "am trying with this batch file to look at the directory the batch file is in" 
(for /r "%~dp0" %%F in (*System1*.txt* *System2*.txt*) do (
    rem "I want all files greater than 0kb to be written out" 
    if %%~zF GEQ 1 (
     rem "Is there a way to just exclude this Filename.txt file?" 
     if "%%~nxF" neq "Filename.txt" echo %%F 
    ) 
)) > "%out%" 
exit /b 

但是,必須注意以下幾點:

  • 批處理文件(%~dp0)的路徑應的情況下,用引號括起來它可能包含空格。
  • 如果沒有其他文件System,只需要System1System2,那麼(*System*.txt*)通配符就足夠了。
  • 通常所有文件的大小大於零個字節。如果您的系統不定期創建空文件,則不需要相關的if命令。
  • 輸出文件名Filename.txt永遠比不上給予*System*.txt*外卡,所以最後if命令是沒有必要的。
+0

此代碼生成即使沒有數據被寫入到它的文本文件。有沒有辦法讓它不生成文件或以某種方式刪除它? – dog2bert

+0

@ dog2bert:插入此行月底:'用於%%一個在( 「%出來%」)做,如果%%〜雜誌EQU 0刪除 「%出來%」' – Aacini

0

沒有進一步的細節,這是使用代碼爲基礎的可能解決方案:

@echo off 
set "out=%~dp0\FileName.txt" 
(for /r "%~dp0" %%F in (*System*.txt*) do if %%~zF GTR 0 echo %%F)>"%out%" 
exit /b 
0
@echo off 
    set "out=%~dp0FileName.txt" 
    (for /r "%~dp0" %%F in (*System1*.txt* *System2*.txt*) do if %%~zF GEQ 1 echo %%F) > %out% 
    exit /b 

for命令允許多套in子句中的文件,因此,只是包括他們。

+0

這一件作品,非常感謝 – dog2bert