2017-06-13 78 views
2

我有一些PowerShell連接到我的服務器,並返回一個地址傳遞給一個批處理文件。從powershell傳遞到批處理時丟失部分url

這個批處理文件是一個需求,因爲它是一個HTA /批量混合,允許我爲該項目運行創建的用戶界面。該URL作爲iframe源來傳遞,以從服務器加載一些結果。

我有一個變量$content在PowerShell中,它等於http://example.com/selectMultiple.php?choice=[{"id":51,"p":100},{"id":52,"p":94}](稍加修改,以保護我的服務器地址)

我然後啓動該批處理文件,同時通過該$content變量像這樣

"Launching $content" 
Start-Process "files\hybrid.bat" "$content" 

在批處理文件中,我有一些代碼表明echo是傳遞給它的值。

set "link=%~1" 
echo %link% 

但是通過後,一些變量被修剪。這回聲http://example.com/selectMultiple.php?choice - 這導致我相信有一些=符號正在打破字符串。

我試過在powershell和從我的服務器(PHP)urldecode方法,並沒有解決這個問題。

我在這裏損失將非常感激任何幫助解決這一issue./

(我標記PHP爲好,證明我確實有被返回URL代碼工作能力)

+0

你不能擺脫批處理文件,並直接用powershell做東西?你可以將文本轉儲到文件並在批處理文件中讀取(作爲解決方法)?你能保存文本到env變量並在批處理文件中讀取它嗎? – 4c74356b41

+0

@ 4c74356b41我無法擺脫批處理文件,我將其用作HTA/Batch Hybrid。網址正在被傳遞到基本打開HTA並加載一個帶有URL的iframe。我可以將它轉儲到一個文件作爲解決方法,但我覺得這將是一個較慢的方法,對於這個應用程序我需要儘可能快。 – GrumpyCrouton

+0

Windows命令提示符將'='-sign作爲標記分隔符,就像空格一樣;也許它在你的批處理文件中使用'set「link =%*」'時有幫助,因爲你只傳遞鏈接...... – aschipfl

回答

3
Start-Process "files\hybrid.bat" """$content""" 

注意$content變量包含它們在批次腳本視作parameter delimiters字符(例如=,):

分隔符將下一個參數分開 - 它們將 命令行分成單詞。

參數是最經常由空格分隔,但任何 以下也都是有效的分隔符:

  • 逗號(,)
  • 分號(;)
  • 等於(=)
  • Space()
  • Tab()

調用的批處理(請參見set "link=%~1"命令)以正確的方式從第一個提供的參數中除去雙引號。因此,您需要傳遞來自$content變量enclosed in double quotes from powershell的字符串。使用一倍內雙引號如下:

#        ↓   ↓ string delimiters are not supplied 
Start-Process "files\hybrid.bat" """$content""" 
#         ↑↑  ↑↑ escaped inner double quotes are supplied 

雙引號字符串("

當你用雙引號字符串,任何變量 名字符串中諸如"$myVar"會在處理命令時用 變量的值替換。 ... 任何嵌入式 雙引號可以使用嚴重口音作爲`"或 加倍(取代"""

相關問題