微剋多資訊

 找回密碼
 註冊

Sign in with google

Google帳號登入

搜索

該用戶從未簽到

升級   50.5%

跳轉到指定樓層
主題
發表於 2015-4-26 17:47 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最後由 jmsdhn 於 2015-4-26 17:48 編輯

打擾了
以下是批次檔的問題(懶人問題)<---自婊
如果您誤入
請上一頁

話說
一寫批次檔就會有入魔的感覺
問題是是這樣的
先前已經寫了一個針對Google Chrome更新後自動將舊版刪除的批次檔
內容如下:
for /f "tokens=1,2 delims= " %%i in (%temp%\cmp.txt) do if %%i lss %%j rd/s/q "%ChApp%\%%i"
其中cmp.txt的內容是42.0.2211.90半形空格42.0.2211.118
%ChApp%的內容是%ProgramFiles(x86)%\Google\Chrome\Application
問題在於IF指令對於不同長度的數字字串會比對錯誤
而導致新版反而被刪除

譬如42.0.2211.90比42.0.2211.118
前面三個版本號是相同的
而後面90比118
118反而會被IF視為小

有何方法可以讓90前面自動加上0嗎?
感謝賜教!
樓主熱門主題

該用戶從未簽到

升級   50.5%

2F
發表於 2015-4-27 09:30 | 只看該作者
本帖最後由 ad6543210 於 2015-4-27 09:35 編輯



我想到的是用土法煉鋼一個一個比對...

想法:因為補0的判斷還是會用到迴圈方式,就乾脆在進去迴圈的時候直接用來判斷數字大小好了

版本1如果比版本2小,就會跳到顯示 delete 的地方
反之沒作用

您再抓要用到的程式碼去改好了 XD
  1. @echo off

  2. rem 這裡是版本號碼,可改為參數輸入
  3. set str="42.0.2211.90"
  4. set str2="42.0.2211.118"

  5. rem 這裡把 . 取代為 空白
  6. set ver=%str:.= %
  7. set ver2=%str2:.= %

  8. :STR_1
  9. echo ver = %str%
  10. for /f "tokens=1-4" %%a in (%ver%) do (
  11.     set v1a=%%a
  12.     set v1b=%%b
  13.     set v1c=%%c
  14.     set v1d=%%d
  15.     goto STR_2
  16. )
  17. :STR_2
  18. echo ver2 = %str2%
  19. for /f "tokens=1-4" %%a in (%ver2%) do (
  20.     set v2a=%%a
  21.     set v2b=%%b
  22.     set v2c=%%c
  23.     set v2d=%%d
  24.     goto STR_3
  25. )
  26. :STR_3
  27. if %v1a% lss %v2a% (
  28.     goto STR_DELETE
  29. ) else (
  30.     if %v1b% lss %v2b% (
  31.         goto STR_DELETE
  32.     ) else (
  33.         if %v1c% lss %v2c% (
  34.             goto STR_DELETE
  35.         ) else (
  36.             if %v1d% lss %v2d% (
  37.                 goto STR_DELETE
  38.             ) else (
  39.                 echo not delete
  40.                 goto STR_END
  41.             )
  42.         )
  43.     )
  44. )
  45. :STR_DELETE
  46. echo delete
  47. :STR_END
複製代碼

點評

感謝回覆,先收下,再來研究,感謝分享^^  發表於 2015-4-27 21:58
1 0

使用道具

該用戶從未簽到

升級   50.5%

3F
 樓主| 發表於 2015-4-28 22:41 | 只看該作者
仔細看了這個批次指令之後
大概知道這個批次的作用
不過其中竟然發現這指令set ver=%str:.= %
set竟然可以這樣用
把原先字串中的某關鍵字代換為其他
超喜歡!!!
感覺set實在太博大精深了
但set/?的說明實在很難看懂
請教對於set這樣的設定
尤其是像這樣
set ver=%str:.= %
中內含冒號的
有沒有詳細的教學呢
我曾看過
set dd=%date:~8,2%
但也只會依樣畫葫蘆地用而已
感覺set幾乎可以自成一本書了
感謝又讓我學到set的應用喔

使用道具

該用戶從未簽到

升級   50.5%

4F
 樓主| 發表於 2015-4-29 10:30 | 只看該作者
本帖最後由 jmsdhn 於 2015-4-29 10:36 編輯

打擾了
因為問題類似
我就不再開另一個主題了


問題是這樣的
有一個檔案被掛在軟體上
檔案的路徑如下
D:\路徑\路徑\檔案
它會被以登陸值的方式掛在軟體上
所以在批次檔之下會是這樣
Reg.exe add "HKCU\Software\軟體\D:%%92路徑%%92路徑%%92檔案" /v "Path" /t REG_SZ /d "D:\路徑\路徑\檔案" /f


請教如何讓以下字串
D:\路徑\路徑\檔案
在批次檔內被代換成
D:%%92路徑%%92路徑%%92檔案


或許這問題可以簡化成
如何在批次檔內
讓(半形%符號)可以代換任何字元
感謝賜教

使用道具

您需要登入後才可以回帖 登入 | 註冊

本版積分規則

小黑屋|Archiver|微剋多資訊(MicroDuo)

GMT+8, 2024-4-20 15:58

Discuz! X

© 2009-2023 Microduo

快速回覆 返回頂部 返回列表