【问题标题】:List of folders and their DATE in bat filebat 文件中的文件夹列表及其日期
【发布时间】:2016-12-30 09:26:30
【问题描述】:

我正在尝试创建一个文件夹列表及其大小,主要是因为我的驱动器空间不足。我无法弄清楚我在哪里以及为什么空间不足,因此我想创建所有文件夹的列表,包括它们的大小和修改日期(或创建日期也有效)。 列出文件夹及其大小是我管理的事情,但是我也不确定如何编写修改日期。我尝试了 set "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"

【问题讨论】:

  • 不,不是重复的,已经查看了该帖子。答案只是大小。我已经在临时文件中知道了文件夹的大小和它们的名称,我只是不知道如何写创建日期(或修改日期)。
  • @OanaScheianu,请不要更改问题的主题,尤其是在已经发布答案的情况下,因为这些可能会失效!而是问一个新问题!有~t modifier返回最后修改日期/时间...
  • @aschipfl 我希望你在开玩笑。我没有更改我的问题的主题/我现在只是将标题更改为更具体,因为我看到人们不会费心从头到尾阅读它。我专门写了我设法列出文件夹的名称和大小。日期是我无法成功写入的日期。已经尝试使用 ~t 修饰符,但没有成功。因此,如果有人可以专门帮助我完成这部分,我会在这里发布。
  • for /f "delims=" %%a in (' dir /ad /b ') do call :size "%%~fa" "%%~ta" 将提供上次写入的日期时间作为第二个参数。

标签: windows batch-file


【解决方案1】:

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

  1. 将开关/-C添加到dir命令中,以避免千位分组符号;
  2. 不搜索文本File(s),而只阅读倒数第二行;

所以这是更改后的代码(我希望我正确地解释了您格式错误的代码):

@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 选项只是避免在发生错误时读取两行标题。


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

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

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

【讨论】:

    【解决方案2】:

    在此处查看我关于清洁硬盘驱动器的完整答案 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.
    

    【讨论】:

    • 你好。同样,我对计算大小不感兴趣,已经用 bat 文件完成了。我也有兴趣在临时文件中写入日期,目前我没能做到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多