2016-12-30 37 views
-1

我想創建一個文件夾列表和它們具有的大小,基本上是因爲我的驅動器空間很小。我無法弄清楚我在哪裏以及爲什麼會耗盡空間,因此我想創建一個所有文件夾的列表,其大小和修改日期(或創建日期也適用)。 要列出文件夾及其大小是我管理的東西,但我不知道如何編寫修改日期。我嘗試了一些設置「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://stackoverflow.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

回答

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. 
+0

你好。同樣,我對計算大小不感興趣,已經用bat文件完成了。我有興趣在臨時文件中寫入日期,目前我無法做到這一點。 –

2

起初,我會改變檢索文件夾大小的策略,因爲你的做法是強烈依賴語言環境。但也有可以做,以避免兩件事情:

  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命令只是呼應字符串一招沒有尾隨換行符,所以創建日期/時間與其餘部分(大小加文件夾路徑)在同一行中返回。

相關問題