bat文件中的文件夹列表及其DATE

时间:2016-12-30 09:26:30

标签: windows batch-file

我正在尝试创建一个文件夹列表以及它们具有的大小,主要是因为我的驱动器空间不足。我无法弄清楚我在哪里以及为什么我的空间不足,因此我想创建一个所有文件夹的列表,其大小和修改日期(或创建日期也适用)。 列出文件夹及其大小是我管理的内容,但是我不知道如何编写修改日期。我尝试了一些设置为“mtime = %% ~tf”的变体,但是没有成功。我对每个文件夹的内容不感兴趣,只是我在脚本中定义的所有子文件夹的相关信息。 低于我到目前为止所做的(也经过测试)。 提前谢谢!

稍后编辑:不重复,该帖子解释了如何写大小,我已经想出来了,它写在代码中。我也无法弄清楚如何编写修改/创建日期..

@echo off
pushd "D:\test" 
for /f "delims=" %%a in (' dir /ad /b ') do call :size "%%~fa"
popd
pause
goto :eof

:size
for /f "tokens=3" %%b in ('dir /s "%~1" 2^>nul ^|find " File(s)"') do set "n=%%b"
set dirsize=%n%
REM set dirsize=%dirsize:,=%
set dirsize=%dirsize%
set dirsize=%dirsize:~-18%
>>"D:\test\dirsize.tmp" echo %dirsize% "%~1"

输出:

7,557 "D:\test\e"
2,519 "D:\test\t"
2,519 "D:\test\ta"

2 个答案:

答案 0 :(得分:2)

首先,我会更改检索文件夹大小的策略,因为您的方法非常依赖于语言环境。但是有两件事可以避免这种情况:

  1. 将开关/-C添加到dir命令以避免千个分组符号;
  2. 不搜索文字File(s),而只搜索倒数第二行;
  3. 所以这是改变后的代码(我希望我能正确解释你错误格式化的代码):

    @echo off
    pushd "D:\test"
    > "D:\test\dirsize.tmp" (
        for /F "eol=| delims=" %%A in ('
            dir /B /A:D
        ') do (
            call :SIZE "%%~fA"
        )
    )
    popd
    goto :EOF
    
    :SIZE
    set "NUM="
    for /F "skip=2 tokens=3" %%B in ('
        2^> nul dir /S /-C "%~1"
    ') do (
        call set "DIRSIZE=%%NUM%%"
        set "NUM=%%B"
    )
    echo %DIRSIZE% "%~1"
    

    skip=2选项只是避免在发生错误时读取两行标题。

    要添加每个目录的最后修改日期/时间,只需在子例程%1的最后一行使用~t modifier作为参数引用:SIZE:< / p>

    echo %~t1 %DIRSIZE% "%~1"
    

    为了获取每个文件夹的创建日期/时间,没有修饰符,但是有/T:C option of the dir命令和目录.,它是第一个返回的项目,指向给定文件夹本身。因此,我们可以使用另一个for /F循环来捕获.旁边的日期/时间,该日期/时间在以下代码中的新子例程:CDAT中实现:

    @echo off
    pushd "D:\test"
    > "D:\test\dirsize.tmp" (
        for /F "eol=| delims=" %%A in ('
            dir /B /A:D
        ') do (
            call :CDAT "%%~fA"
            call :SIZE "%%~fA"
        )
    )
    popd
    goto :EOF
    
    :SIZE
    set "NUM="
    for /F "skip=2 tokens=3" %%B in ('
        2^> nul dir /S /-C "%~1"
    ') do (
        call set "DIRSIZE=%%NUM%%"
        set "NUM=%%B"
    )
    echo %DIRSIZE% "%~1"
    goto :EOF
    
    :CDAT
    for /F "skip=5 tokens=1-2" %%C in ('
        dir /A:D /T:C "%~1"
    ') do (
        < nul set /P ="%%C %%D "
        goto :NEXT
    )
    :NEXT
    goto :EOF
    

    < nul set /P命令只是在没有尾随换行符的情况下回显字符串的技巧,因此创建日期/时间与其余行(文件大小加文件夹路径)返回同一行。

答案 1 :(得分:0)

请在此处查看有关清洁硬盘驱动器的完整答案 https://answers.microsoft.com/en-us/windows/forum/windows_vista-files/need-help-in-deleting-un-neccesary-files-from-the/a6daf1f1-7c50-45bd-b7a9-7732b5c19f28

查看文件占用空间的位置

这将列出驱动器上文件夹的文件数和大小。每个命令都有一个子集,因此您可以更好地管理它。

开始 - 所有程序 - 附件 - 右键单击​​“命令提示符”,然后选择“以管理员身份运行”。键入(或通过右键单击“命令提示符”窗口并选择“粘贴”进行复制和粘贴)。

然后配置命令提示符。右键单击命令提示符的标题栏 - 属性 - 布局选项卡 - 然后为屏幕缓冲区大小高度输入1000,为窗口大小高度输入43(或50)。如果需要,可以更改颜色(颜色选项卡)和字体(字体选项卡)。

查看文档中文件夹的大小,不包括音乐,视频或图片文件夹。

for /f "skip=2 tokens=3" %A in ('Reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "Personal"') do set doc=%A

for /f "usebackq tokens=2* delims= " %i IN (`dir "%doc%" /a /s ^|findstr /i /v "\/"^|findstr /l /v "Pictures Music Video"`) DO @echo %j&echo.

查看音乐中文件夹的大小。

for /f "skip=2 tokens=4" %A in ('Reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "My Music"') do set Doc=%A

for /f "usebackq tokens=2* delims= " %i IN (`dir "%doc%" /a /s ^|findstr /i /v "\/"`) DO @echo %j&echo.

查看图片中文件夹的大小。

for /f "skip=2 tokens=4" %A in ('Reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "My Pictures"') do set Doc=%A

for /f "usebackq tokens=2* delims= " %i IN (`dir "%doc%" /a /s ^|findstr /i /v "\/"`) DO @echo %j&echo.

在视频中查看文件夹的大小。

for /f "skip=2 tokens=4" %A in ('Reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "My Video"') do set Doc=%A

for /f "usebackq tokens=2* delims= " %i IN (`dir "%doc%" /a /s ^|findstr /i /v "\/"`) DO @echo %j&echo.

查看桌面上文件夹的大小。

for /f "skip=2 tokens=3" %A in ('Reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "Desktop"') do set doc=%A

for /f "usebackq tokens=2* delims= " %i IN (`dir "%doc%" /a /s ^|findstr /i /v "\/"`) DO @echo %j&echo.

查看Windows文件夹中文件夹的大小。

for /f "usebackq tokens=2* delims= " %i IN (`dir "%windir%" /a /s ^|findstr /i /v "\/"`) DO @echo %j&echo.

查看Program Files文件夹的文件夹大小。

for /f "usebackq tokens=2* delims= " %i IN (`dir "%ProgramFiles%" /a /s ^|findstr /i /v "\/"`) DO @echo %j&echo.