jmsdhn 發表於 2019-5-22 13:18

【PS】和掛載ISO連動的XML,其字元搜尋與取代的問題

本帖最後由 jmsdhn 於 2019-5-22 14:05 編輯

打擾了
由於PS的掛載是無法指定的
而個人又喜歡用指令掛載ISO
總是會衍伸一些問題
抱歉
再次打擾了

已知這段指令可以得到目前掛載對象所掛的DriveLetter(有時G有時N或其他)
$vol = Mount-DiskImage -ImagePath D:\ISO\掛載對象.iso -PassThru | Get-DiskImage | Get-Volume
$CDRoot = '{0}' -f $vol.DriveLetter

目前有一個 config.xml 會跟 掛載對象.iso 作連動
config.xml 是被某個軟體讀取的對象
和 掛載對象.iso 比較無關
N:\common\AAA.exe 是 掛載對象.iso 內的路徑
假定內容是
...
    <Path>N:\common\AAA.exe</Path>
    <CommandLine />
    <StartIn>N:\common</StartIn>
...

個人目前已知以下指令
((Get-Content -path R:\config.xml -raw) -replace 'N:','G:') | Set-Content -Path R:\config.xml
是將 R:\config.xml 以單一行不換列的方式讀進記憶體
搜尋N:並改成G:
再寫出覆蓋到原檔案

想請教
如果這次 D:\ISO\掛載對象.iso 目前掛載到Y槽
而上次是(未知的槽)
要如何在目前的 config.xml 找到 ”<Path>(未知的槽):\common” 和 ”<StartIn>(未知的槽):\common</StartIn>”
以便把(未知的槽)這個字元
放到以下指令的被替換字元位置
((Get-Content -path R:\config.xml -raw) -replace 'N:','Y:') | Set-Content -Path R:\config.xml
也就是 -replace '(未知的槽):','Y:'
Y是抓$CDRoot來填
或是直接填${CDRoot}?

綜觀以上問題
好像可以歸類為字串處理的問題
其他是個人盡可能寫出的狀況
希望不會影響觀看
感謝指教

jmsdhn 發表於 2019-5-28 11:25

感覺這問題難解
為了不顯得射後不理
還是說一下用了PS掛載後的感受

在開樓之前
其實有想過用BAT方式會比較快
用PS掛載就會衍生很多麻煩

個人的PC已經沒有實體光碟機
而酒精驅動的(VMWARE會把它當成真正的光碟機)
但酒精和18362互衝
為了PS掛載
VMWARE的光碟也必須斷連
不然每次開都會警告SATA0 brabrabra...


ULTRAISO安裝版是有內建指令版的掛載程式
但曾經試掛ISZ竟然每次都會綠底白字
好恐怖

若不小心讓PS掛到別的磁碟代號
譬如想要掛G就會突然掛在H之類的
那之後的掛載就會在這些新增的磁碟代號上變換

目前
ISZ NRG BIN等等只能用酒精免裝版了
這個情況還好
而在只用PS掛載的情況下
能夠做的
就是先全卸載
再掛載
避免PS亂掛
而且還必須這個系統完全沒掛過別的磁碟代號
才不會亂跳代號

滿問號
不知道為何POWERSHELL不在掛載指令上多一個指定代號的參數
頁: [1]
查看完整版本: 【PS】和掛載ISO連動的XML,其字元搜尋與取代的問題