文件夹及其在bat文件中的日期列表

问题描述:

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

后来编辑:不是重复的,该文章解释了如何编写大小,我已经想通了,它是写在代码中。我无法弄清楚如何写修改/创建日期太..

@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

可能的重复[如何通过批处理文件列出与大小的所有文件夹](http://*.com/questions/21711180/how-to-list-all-folder-with-size-via-batch-file ) – JosefZ

+0

不,不是重复的,已经看过那篇文章。答案只是大小。我已经有临时文件中的文件夹和他们的名字的大小,我只是无法弄清楚如何编写创建日期(或修改日期)。 –

+0

@OanaScheianu,请不要改变问题的主题,尤其是在已经发布答案的情况下,因为这些问题可能会失效!改为问一个新问题!有['〜t'修饰符](http://ss64.com/nt/syntax-args.html)返回最后修改日期/时间... – aschipfl

看到我的完整的答案在这里清理硬盘驱动器 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. 
+0

你好。同样,我对计算大小不感兴趣,已经用bat文件完成了。我有兴趣在临时文件中写入日期,目前我无法做到这一点。 –

起初,我会改变检索文件夹大小的策略,因为你的做法是强烈依赖语言环境。但也有可以做,以避免两件事情:

  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选项只是避免了两行标题中出现错误的情况下被读取。

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


要添加的每个目录的最后修改的日期/时间,只需在子程序:SIZE的最后一行使用~t modifier对于参数参考%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命令只是呼应字符串一招没有尾随换行符,所以创建日期/时间与其余部分(大小加文件夹路径)在同一行中返回。