Windows批处理脚本:正则表达式或语句

时间:2014-05-05 14:33:45

标签: regex windows batch-file

@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。

我遇到的问题是OR语句。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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子句中的多组文件,因此,只需包含它们。

答案 2 :(得分: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命令。