2011-12-01 116 views
4

我想翻譯.bat文件到PowerShell和具有理解什麼的一小段代碼是幹什麼的麻煩:翻譯DOS批處理文件的PowerShell

set MY_VARIABLE = "some\path\here" 
"!MY_VARIABLE:\=/!" 

什麼是上面做2號線?特別是,我不明白什麼:\ = /正在做什麼,因爲我已經看到了變量,其他代碼被引用像!MY_VARIABLE !.

混淆的另一點是下面的代碼。

set SOME_VARIABLE=!SOME_ARGUMENTS:\=\\! 
set SOME_VARIABLE=!SOME_ARGUMENTS:"=\"! 

另外,你能告訴我上面第3行和第4行發生了什麼嗎?

以下哪些變量也會轉換爲PowerShell?

set TN0=%~n0 
set TDP0=%~dp0 
set STAR=%* 

對此非常感謝。謝謝。

回答

1

DOS批處理文件中的感嘆號(!)引用中間值,如果您處於for-loop狀態,則有用。如果您要使用%(在循環中),它會一遍又一遍地返回相同的值。

第3行和第4行分別將「SOME_VARIABLE」設置爲「SOME_ARGUMENTS:\ = \」和SOME_ARGUMENTS:「= \」的中間值。再次,我猜這些線是從一個循環。

對於變量賦值,PowerShell的變量賦值的工作是這樣的:

$myVariable = "my string" 

〜DP0(在DOS批處理)轉換爲路徑(以盤符)當前bat文件的。您可以通過執行「獲取位置」來在Powershell中獲得。

爲什麼有人需要爲STAR(*)設置一個變量超出了我的意思,所以我假設有一些編碼問題或其他原因,他們不能只使用星號。

〜n0我不確定;也許別人知道那是什麼。

+0

感謝這很長的路要幫助我將這個批處理文件轉換爲PowerShell – user1075715

4

!var:find=replace!是延遲擴展變量的字符串替換。

http://www.robvanderwoude.com/ntset.php#StrSubst

當您使用!,而不是%的變量,你要DOS做在執行時的變量替換(這可能是你認爲它與%做,但事實並非如此)。使用%時,在解析命令(在運行之前)時會替換該變量 - 因此,如果該變量作爲命令的一部分進行更改,則不會被看到。我認爲有些開關總是使用!,因爲它會給出「正常」的行爲。

你可以閱讀更多關於延遲擴展這裏

http://www.robvanderwoude.com/ntset.php#DelayedExpansion

+0

謝謝。這太棒了。 – user1075715

2

前兩個set variableName=命令使用改性劑對批處理文件的名稱,表示爲%0擴大。

%~n0將其展開爲文件名,並且
%~dp0將其展開爲包含驅動器號和路徑。

最後一個%*表示傳遞給批處理文件的所有參數。

可以找到更多的信息here