用于在文件夹中查找空文件的批处理脚本

时间:2016-10-19 19:06:26

标签: powershell batch-file cmd

我需要在文件夹中识别零KB文件并将输出写入文本文件。下面是我通过使用批处理脚本找到的代码,我想根据我的以下要求自定义。

@echo off
set out=found.txt
(for /r c:\myfolderfilestosearch %%F in (*.txt) do (if %%~zF LSS 1 echo %%F)) > %out%
pause

我实际上想创建&将结果写文件当且仅当上述文件夹只包含任何0kb文件时,我的上述脚本即使没有0KB文件也会为每个实例创建一个txt文件。

我认为我们可以使用 if else 来实现它,但正如我所说,我是新手,并感谢有人使用脚本指导它。

P.S。我也可以在PowerShell中编写脚本。谢谢。

4 个答案:

答案 0 :(得分:1)

问题是:如果您实际上正在编写数据,重定向并不关心。无论如何它正在创建文件。但如果它的大小为零(没有写入数据),你可以在之后摆脱它

@echo off
set out=found.txt
(for /r c:\myfolderfilestosearch %%F in (*.*) do if %%~zF LSS 1 echo %%F) > %out%
for %%a in (%out%) do if %%~za == 0 del %out% 
pause

(我希望== 0equ 0代替lss

答案 1 :(得分:1)

PowerShell的

Get-ChildItem -Path C:\myfolderfilestsearch -Recurse -Force | Where-Object { $_.PSIsContainer -eq $false -and $_.Length -eq 0 } | Select -ExpandProperty FullName | Add-Content -Path found.txt

为每次运行重新创建输出文件:

(Get-ChildItem -Path C:\myfolderfilestsearch -Recurse -Force | Where-Object { $_.PSIsContainer -eq $false -and $_.Length -eq 0 } | Select -ExpandProperty FullName) | Set-Content -Path found.txt

答案 2 :(得分:0)

你有太多不必要的事情,而且你不需要/r。这适用于我的机器:

@echo off
set out=found.txt
for %%F in (c:\myfolderfilestosearch\*.*) do if %%~zF LSS 1 echo %%F >> %out%
pause

请注意,如果您没有为 found.txt 指定特定的文件夹位置,它将位于批处理文件本身所在的任何文件夹中。如果您不想要,请在批处理文件中使用cd指定该文件的路径或更改为该文件夹:

@echo off
cd /d "C:\myfolderfilestosearch"
set out=found.txt
for %%F in (*.*) do if %%~zF LSS 1 echo %%F >> %out%
pause

@echo off
set out="C:\myfolderfilestosearch\found.txt"
for %%F in (c:\myfolderfilestosearch\*.*) do if %%~zF LSS 1 echo %%F >> %out%
pause

编辑:使用>>附加到输出文件。

答案 3 :(得分:0)

收集输出并延迟"写入文件"部分不是那么简单。无论如何更容易将输出写入文件,如果遇到非零大小的文件,则删除该文件。

$rootScope

在PowerShell中,您可以这样做:

@echo off

set "out=found.txt"
set "allzero=y"

(for /r C:\myfolderfilestosearch %%F in (*.*) do (
  if %%~zF gtr 0 (
    set "allzero=n"
    goto :done
  )
  echo %%F
))>"%out%"

:done
if "%allzero%"=="n" del /q "%out%"