如何用Bat檔寫出比對資料夾容量的參數

請問各位高手們,最近因工作關係,想用bat寫比對資料夾容量的編輯檔,但是用過fc和comp這兩個參數都無法達成我需要的,作業系統是XP的,請問各位大大有什麼方法嗎?

例:要比對資料夾A和B,其中資料夾B多了一個檔案,那麼資料夾B容量勢必會比A來的多,我需要下什麼參數來比對呢?只需比對資料夾容量,不用管多了什麼東西唷!
改個方式,找出共有幾個檔案。
在 Win7 測試 OK,手邊沒 XP,不確定能動。
因為關鍵在於找出關鍵字「個檔案」和「 0 」
結果的最後一行是總數

程式碼請改到這裡看:
https://gist.github.com/anonymous/ed59d076381d0435da78

結果:
3 個檔案 72,928,657 位元組
3 個檔案 63,775,597 位元組
4 個檔案 185,418,480 位元組
1 個檔案 301 位元組
11 個檔案 322,123,035 位元組
araxis marge

folder compare 可以看出目錄的差異

事實上只要support folder compare 的軟體,都能看出資料夾差異
議MO wrote:
要比對資料夾A和B,其中資料夾B多了一個檔案,那麼資料夾B容量勢必會比A來的多,我需要下什麼參數來比對呢?只需比對資料夾容量,不用管多了什麼東西唷!

批次檔同時接收 2 個參數
%1 資料夾A
%2 資料夾B
再過濾出要的資料
應該不困難.
☆ 私人訊息直接刪除不再回覆 ☆ 願望 : bovuhPPjMnEfkyhggnsJdABaLFPuhXT4

John wrote:
在 Win7 測試 OK,手邊沒 XP,不確定能動。

Windows XP 測試正常.

☆ 私人訊息直接刪除不再回覆 ☆ 願望 : bovuhPPjMnEfkyhggnsJdABaLFPuhXT4
John wrote:
改個方式,找出共有幾...(恕刪)


我試了之後也是可以的,但是目前正在想要怎麼比對兩者差異,若不同則顯示錯誤訊息不然就是執行下個動作...
議MO wrote:
我試了之後也是可以的,但是目前正在想要怎麼比對兩者差異,若不同則顯示錯誤訊息不然就是執行下個動作...

用 IF

IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command

NOT 表示 Windows XP 應該只有在條件為偽時才執行命令。

ERRORLEVEL number 當上一個執行的程式傳回的結束碼大於或等於指定數字時,則條件為真。

string1==string2 當指定的文字字串相符合時,則條件為真。

EXIST filename 如果指定的檔名存在時,則條件為真。

command 指定當條件為真時所要執行的命令。
命令之後可以接著 ELSE 命令。當指定條件為偽時,緊接在 ELSE 命令之後的命令將會被執行。

如果您啟用擴充命令,IF 的變更如下:

IF [/I] string1 compare-op string2 命令
IF CMDEXTVERSION 數字命令
IF DEFINED 變數命令

compare-op 可以是:

EQU - 等於
NEQ - 不等於
LSS - 小於
LEQ - 小於或等於
GTR - 大於
GEQ - 大於或等於
☆ 私人訊息直接刪除不再回覆 ☆ 願望 : bovuhPPjMnEfkyhggnsJdABaLFPuhXT4
議MO wrote:
只需比對資料夾容量,不用管多了什麼東西唷!

只需比對大小是吧?

Total Commander

左視窗擺 A 資料夾;按一個組合鍵算出所有資料夾大小;
右視窗擺 B 資料夾;按一個組合鍵算出所有資料夾大小;
(組合鍵就是 shift-ALT-Enter 三個鍵一齊按, 一秒夠了吧?)
Total Commander 只要按一個空白鍵, 就可以計算游標所停留處資料夾的大小。

搞定。

圖例:
copy foobar 資料夾到 G:
右邊的 encoders 資料夾裡面故意刪掉了一個檔。
依上述原則操作一次....

Code:
https://gist.github.com/anonymous/1244a91169fea813998d

因為總數一定是最後一行,所以把每行都加入同一個變數名稱,又後者會取代前者,所以最後變數的內容,會是總數的資料。

@echo off
REM 定義來源與目的資料匣
REM (把 d:\fiderA 與 d:\fiderB 改成你的來源與目的目錄)
set fd_a=d:\filderA
set fd_b=d:\filderB


if not exist "d:\temp" (md d:\temp)
dir/-c %fd_a% | find "個檔案" > d:\temp\size.txt
for /f "usebackq tokens=3 delims= " %%i in (d:\temp\size.txt) do set a_size=%%i

dir/-c %fd_b% | find "個檔案" > d:\temp\size.txt
for /f "usebackq tokens=3 delims= " %%i in (d:\temp\size.txt) do set b_size=%%i

echo 來源 容量:%a_size%
echo 目的 容量:%b_size%

if %a_size%==%b_size% (goto sub1) else (goto sub2)

:sub1
echo 來源與目的相符
REM 這裡放 "相同" 時要執行的指令
goto end

:sub2
echo 來源與目的不相符
REM 這裡放 "不相同" 時要執行的指令
goto end

:end
del /f /q d:\temp\size.txt

關閉廣告
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!