iT邦幫忙

0

批次檔變數值無法顯示

esel 2016-10-27 11:24:083595 瀏覽

請教各位前輩:
想用批次檔跑網域電腦中Backup資料夾有幾個ZIP以及檔案大小,
但實際跑出來變數值都是空的,不曉得是哪裡出錯了,請指教小弟~感謝!

程式碼如下:

@Echo off
for /f "skip=3 tokens=1,2* delims=\ " %%a in ('net view') do (

for /f "tokens=1,3" %%i in ('dir/-c "\\%%a\d$\Backup\*.zip"/s^|find "個檔案"')  do set Total=%%i&&set Totalsize=%%j
set /A iValue=%Totalsize%/1048576
echo 電腦名稱是:%%a
echo 檔案數是:%Total%
echo 總容量是:%Totalsize%
echo 運算過是:%iValue% M
)

結果:

電腦名稱是:CHRIS
檔案數是:
總容量是:
運算過是: M
請按任意鍵繼續 . . .
電腦名稱是:GRACE
檔案數是:
總容量是:
運算過是: M
請按任意鍵繼續 . . .

如果只執行這顯示是正常:

for /f "tokens=1,3" %%i in ('dir/-c "\\CHRIS\d$\Backup\*.zip"/s^|find "個檔案"')  do set Total=%%i&&set Totalsize=%%j
set /A iValue=%Totalsize%/1048576
echo 電腦名稱是:%%a
echo 檔案數是:%Total%
echo 總容量是:%Totalsize%
echo 運算過是:%iValue% M

結果:
電腦名稱是:CHRIS
檔案數是:4
總容量是:149404499
運算過是:142 M
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
小成
iT邦高手 10 級 ‧ 2016-10-27 11:54:09
最佳解答

開延遲環境變數擴充,
試試。

@Echo off
SETLOCAL ENABLEDELAYEDEXPANSION
for /f "skip=3 tokens=1,2* delims=\ " %%a in ('net view') do (

for /f "tokens=1,3" %%i in ('dir/-c "\\%%a\d$\Backup\*.zip"/s^|find "個檔案"')  do set Total=%%i&&set Totalsize=%%j
set /A iValue=!Totalsize!/1048576
echo 電腦名稱是:%%a
echo 檔案數是:!Total!
echo 總容量是:!Totalsize!
echo 運算過是:!iValue! M
)

可以參考一下 http://ithelp.ithome.com.tw/questions/10184378 下方我的部分的回答...

esel iT邦新手 4 級 ‧ 2016-10-27 13:21:28 檢舉

感謝~~測試可行!!!~~太感謝了!!
只可惜檔案超過4G會出現『不正確的數字。數字限制為 32 位元精確度。』

@Echo off
SETLOCAL ENABLEDELAYEDEXPANSION

for /f "skip=3 tokens=1,2* delims=\ " %%a in ('net view') do (

for /f "tokens=1,3" %%i in ('dir/-c "\\%%a\d$\Backup\*.zip"/s^|find "個檔案"')  do set Total=%%i&&set Totalsize=%%j

set /A iValue=!Totalsize!/1048576
echo 電腦名是:%%a
echo 檔案數是:!Total!
echo 總容量是:!Totalsize!
echo 運算過是:!iValue! M
set Total=
set Totalsize=
set iValue=

)
1
蟹老闆
iT邦大師 1 級 ‧ 2016-10-27 12:34:35

參考看看原則上OK,沒有實測!

@Echo off
SETLOCAL ENABLEDELAYEDEXPANSION
for /f "skip=3 tokens=1,2* delims=\ " %%a in ('net view') do (

for /f "tokens=1,3" %%i in ('dir/-c /W "\\%%a\d$\Backup\*.zip"/s^|find "個檔案"')  do ( 
set /A iValue=%%k/1048576
echo 電腦名稱是:%%a
echo 檔案數是:%%i
echo 總容量是:%%k
echo 運算過是:!iValue! M
))

差異的地方在於

  1. dir/-c /W 沒有加/W會包含子目錄下的每一個統計而造成錯誤
  2. do ( 少了這個括號根本不會執行想要的動作, 這個)也要有,所以會變成 DO (...)
  3. %%k 應該使用 %%k 來抓合計檔案大小,使用%%J會抓到 "個檔案"
  4. 另外可以直接顯示的就不用再給變數了
蟹老闆 iT邦大師 1 級 ‧ 2016-10-27 12:40:03 檢舉

更正: /W 更正為 /B
測試後不OK

我要發表回答

立即登入回答