我正在尝试创建一个文件夹列表以及它们具有的大小,主要是因为我的驱动器空间不足。我无法弄清楚我在哪里以及为什么我的空间不足,因此我想创建一个所有文件夹的列表,其大小和修改日期(或创建日期也适用)。 列出文件夹及其大小是我管理的内容,但是我不知道如何编写修改日期。我尝试了一些设置为“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"
答案 0 :(得分:2)
首先,我会更改检索文件夹大小的策略,因为您的方法非常依赖于语言环境。但是有两件事可以避免这种情况:
/-C
添加到dir
命令以避免千个分组符号; 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
选项只是避免在发生错误时读取两行标题。
要添加每个目录的最后修改日期/时间,只需在子例程%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.