我遇到問題了。我有一個模仿UNIX的cd命令的批處理文件。它需要一個由用戶輸入的UNIX風格路徑,將其保存爲一個名爲upath2的變量,將其轉換爲Windows風格的路徑,然後將cd保存到該目錄(例如「/ program files/7-zip」將變爲「C: \ Program Files \ 7-Zip「)。類Windows的輸出將被保存爲名爲upath2的變量,並且cmd
的cd
命令將執行並更改爲該目錄。批處理腳本問題 - 搜索並替換變量中的變量?
除了這個「UNIX」cd命令,我還創建了一個名爲「bashemu.bat」的批處理文件,它給了我一個類似bash的提示。所有這些命令都是doskey條目,它們鏈接到我創建的bin和usr \ bin文件夾,這些文件夾包含所有的.bat命令。然後它會在最後執行「cmd/v/k」,這樣我就可以輸入doskey別名並啓動我所有的UNIX風格的命令。
現在,這裏是我的問題:當我的CD-ING我的C的子目錄:\用戶\ xplinux557文件夾 (存儲在一個名爲「unixhome」環境變量),從bashemu變化提示:
[email protected]:~$
,例如:
[email protected]:/Users/xplinux557/Documents/MacSearch_v.1.4.3[1]/Skins/Blue/Icons$
路徑這樣的太長要在命令提示符bashemu內舒適地使用,所以我試圖讓cd命令閱讀完整upath2變量,檢查它是否包含主路徑(如de被unixhome罰款),並簡單地用〜代替。這應該關閉這個:
[email protected]:/Users/xplinux557/Documents/MacSearch_v.1.4.3[1]/Skins/Blue/Icons$
到這一點:
[email protected]:~/Documents/MacSearch_v.1.4.3[1]/Skins/Blue/Icons$
AAAAH,好多了!我的第一種方法是將upath的UNIX樣式路徑轉換爲Windows樣式路徑並命名爲新的var upath2,並將文本%unixhome%替換爲「〜」。這是代碼如何看起來像:
:: set the batch file to retrieve all text from its parameters and replace all
:: unix-style slashes the user put in and replace those with a windows-style backslash
@echo off
set upath=%*
set upath=%upath:/=\%
:: cd to the directory that the user typed in, windows-style
cd "%upath%"
:: Set the upath2 var to the current directory and replace whatever unixhome was
:: a "~"
set upath2=%cd:%unixhome%="~"%
:: Remove the "C:" or "D:" from the quote
set upath2=%upath2:~2%
:: then, set the prompt to read:
:: "[email protected]:~/Documents/MacSearch_v.1.4.3[1]/Skins/Blue/Icons$"
prompt=%USERNAME%@%USERDOMAIN%:%upath2% $$
::EOF
一切工作完全正常,除了讀取行:
set upath2=%cd:%unixhome%="~"%
我意識到它弄亂了,並承認%CD:%和%=」 〜「%作爲變量,並給我一個錯誤消息。我真的很抱歉漫不經心,就像這樣:)但長話短說,有沒有辦法取得變量A的文本,並且如果在變量B中找到該文本,則取代該文本?
謝謝大家提前!
我必須問...你知道你可以簡單地在Windows上運行Bash嗎? http://www.mingw.org/wiki/MSYS – 2010-03-06 21:50:23
哇,這只是爲了得到一個非常怪異的環境而付出的很多努力。實際上,這看起來比DOS,cmd或bash都要痛苦多了...... – Joey 2010-03-06 21:57:07
哦,我在業餘時間只是把它當做業餘愛好而已。 :)我只是想看看bash可能會有多相似。我的計算機上安裝了MinGW,但無論如何,我只是想創建一個可用於擁有類似UNIX的環境的文件庫,完全由DOS批處理腳本編寫。 – 2010-03-06 22:05:58