批处理文件处理目录中除类型文件之外的所有文件

时间:2017-03-20 11:47:31

标签: batch-file batch-processing

我有一段脚本,目前在删除它们之前,通过文件'处理'所有文件的目录运行:

for %%x in (*.J_E, *.J_T, *.J_I, *.bcc) do (
"%%x"=="*.exe" (
  set /a count=count+1
  set choice[!count!]=%%x
)
echo.
::convert files
md %FreshDate%\%FreshTime%
for /l %%x in (1,1,!count!) do (
   echo %%x. !choice[%%x]!
      tlv2txt !choice[%%x]! > %FreshDate%\%FreshTime%\!choice[%%x]!.txt
   del !choice[%%x]!
)

需要此处理的文件列表几乎每周都在增长,我认为处理除少数文件(.dll,* .exe和* .bat)之外的所有文件可能更容易

我尝试在上面的示例开头替换此行:

for %%x in (*.J_E, *.J_T, *.J_I, *.bcc) do (

用这个:

for %%x in (*) do if not "%%x=="*.dll" if not "%%x"=="*.bat" if not "%%x"=="*.exe" (

但我能做的就是删除目录中的所有内容 - 包括运行脚本的批处理文件!

有人可以帮忙吗? 非常感谢

4 个答案:

答案 0 :(得分:2)

您的if构造无效。批量if非常基础。 使用另一种方法:echo文件的扩展名,并使用findstr检查字符串是否不是(/v)给定的一个。

for %%A in (*) do (
  echo %%~xA|findstr /v /x ".dll .bat .exe" && (
    tlv2txt %%A > %FreshDate%\%FreshTime%\%%~nA.txt
  )
)

答案 1 :(得分:1)

@echo off
setlocal EnableDelayedExpansion

set "exclude=.dll.exe.bat."

for %%x in (*) do if "!exclude:%%~Xx.=!" equ "%exclude%" (
   echo %%x
   tlv2txt %%x > %FreshDate%\%FreshTime%\%%~Nx.txt
   del %%x
)

在此方法中,文件的扩展名与排除的扩展名列表进行比较,方式非常简单:扩展名从列表中删除,因此如果结果相同,则此类扩展名不< / em>在列表中。此方法不使用任何外部命令,例如findfindstr,因此运行速度更快。

答案 2 :(得分:0)

包含或排除必须是那么复杂:

:: Inclusion
For /f "Delims=" %%A in (
  'Dir /B *.J_E *.J_T *.J_I *.bcc'
) Do tlv2txt "%%A" > "%FreshDate%\%FreshTime%\%%~nA.txt"

:: Exclusion
For /f "Delims=" %%A in (
  'Dir /B  ^| findstr /i /V ".bat$ .cmd$ .exe$ .dll$" '
) Do tlv2txt "%%A" > "%FreshDate%\%FreshTime%\%%~nA.txt"

答案 3 :(得分:0)

我还会删除不必要的for循环,只需要一个:

If Not Exist "%FreshDate%%FreshTime%\" MD "%FreshDate%%FreshTime%"

For /F "Delims=" %%A In ('Dir/B/A-D^|FindStr/VIE "\.dll \.exe \.bat') Do (
    tlv2txt "%%A">"%FreshDate%%FreshTime%\%%~nA.txt" 2>Nul
    If Not ErrorLevel 1 Del "%%A"))

请注意,我无法确定%FreshTime%变量的格式,因为它已从您的代码段中排除。请确保它不包含尾随退格。