2015-01-16 47 views
1

希望有人可以擺脫一點光線,我一直在用Google搜索每一個可能的方式來做到這一點,我被卡住了。使用我在網絡上找到的零散件構建它。這裏的最終目標是自動搜索位於服務器上的文件夾,以查找30kb或更多的文件夾,並至少將文件夾名稱和位置打印到日誌文件中。如果我可以將它複製並粘貼到另一個位置,那將是很棒的,但這是一個更進一步的道路。這裏是我到目前爲止的塊,我知道「發現」命令不工作,我已經看着使用「forfiles」,但我似乎無法弄清楚如何讓它工作。在cmd中搜索大小範圍的文件夾

TL; DR我如何搜索文件夾30KB以上,然後將它們打印到一個日誌文件?我甚至關閉?

dir \\myserverblahblahblah 

find -size +30kb -type d -printf "%p %s\n" 

folder1\file.txt . > XM8imports.log 
rename file.txt filenew.txt >> XM8imports1.log 

exit /b 0 

謝謝你的幫忙!

+0

從http://www.robvanderwoude.com/files/diskuse_2k.txt開始並根據需要調整 – DavidPostill

+0

您對文件夾大小的定義是什麼?計算大小時,是否將文件包含在子文件夾中? – dbenham

+0

@DavidPostill謝謝你,我會仔細研究一下,看起來很像在這裏學習,所以它可能仍然需要一點點,但謝謝你! – RorySrdn

回答

1

這取決於您對文件夾大小的定義。如果你只包括直接在文件夾(無視子文件夾)的文件,比它是不是用純批太糟糕了:

我相信這個解決方案的工作,無論你使用的是什麼語言。我依賴的事實是,在DIR列表的前4行之後,只有文件摘要行可以準確地擁有4個空格限制令牌。大小在第3個標記中。我使用/-C選項來確保大小不包含數千個分隔符。

大小以字節爲單位,所以30kb = 30 * 1024 = 30720字節。

注意,一批只支持32件有符號數,所以IF語句只能用適當大小的< 2 GB的工作。 IF將把大於2千兆字節的任何值視爲等於2千兆字節。如果您的大小閾值爲2千兆字節,則這不是問題。如果您正在查找其中包含3千兆字節的文件夾,它只會成爲一個問題。

替換「yourRootPathHere」的實際根路徑。

@echo off 
>30k_folders.txt (
    for /d /r "yourRootPathHere" %%F in (*) do (
    for /f "skip=4 tokens=3-5" %%A in (
     'dir /a-d /-c "%%F" 2^>nul' 
    ) do if "%%B" neq "" if "%%C" equ "" if %%A gtr 30720 echo %%F 
) 
) 
type 30k_folders.txt 

的問題,如果你想,當你衡量一個文件夾的大小,包括子文件夾內容是要困難得多。對於純批處理解決方案,這不是一個實際問題。其中一個問題是您必須總結所有子文件夾的大小,並且2GB數學限制可能會很快成爲問題。

的問題很容易在類似VB腳本解決,或JScript或PowerShell的。

JREN.BAT utility可以砍死容易給你想要的結果。

JREN.BAT是本地運行任何Windows機器上從XP起混合的JScript /批處理腳本。它主要用於使用正則表達式搜索和替換來重命名文件/文件夾。但它有一個/ LIST模式,可用於獲取您想要的信息。它內置了用於獲取文件夾累積大小的功能,並且不限於2GB。

@echo off 
call jren "^.*" "(size() > 30*1024) ? path() : ''" /p "YourRootPathHere" /d /list /j /s | findstr . >30k_folders.txt 
type 30k_folders.txt 
+0

沒問題,所以第一個批處理文件看起來正在工作,因爲它返回了3個文件夾,我沒有意識到它們在那裏。但它只返回那些3和即時通訊假設它是因爲我需要的文件夾是壓縮文件夾。現在看着這個非常感謝你,如果你有關於包含壓縮文件夾的建議,那將是非常棒的 – RorySrdn