簡體   English   中英

在VBS路徑中使用空格運行Powershell腳本

[英]Running Powershell script with spaces in path from VBS

有人可以幫忙這個腳本嗎? 基本上,它是由vbs運行的,並且為每個運行腳本的用戶設置了選項。

該腳本在支持dos 8.3文件系統的計算機上按原樣運行,但我們也有很多映像系統,並且不具備此功能...

因此,我無濟於事地嘗試讓不支持8.3的計算機運行此程序。 Powershell不喜歡文件路徑中的空間...,而我正嘗試以靜默方式運行腳本。

Objshell.Run "powershell.exe (gc c:\users\$env:USERNAME\Mydocu~1\Canadi~1\FileImportSettings.config) -replace 'temp','server\blahblah' | out-file c:\users\$env:USERNAME\Mydocu~1\Canadi~1\FileImportSettings.config",0

評論變得凌亂,因此我將其進一步發布到原始帖子上。

我最初發布的內容是我解決此問題的嘗試的一部分,但無法運行。 這個編輯過的確實可以...但是當我嘗試將其更改為雙引號時,代碼不再將用戶名更改為%username%。 我嘗試直接運行命令,而cmd抱怨出文件不是公認的有效命令。

Wscript.echo "powershell.exe (gc ""c:\users\""$env:USERNAME""\Documents\Canadian...\FileImportSettings.config"") -replace 'temp','server\blahblah' | out-file ""c:\users\""$env:USERNAME""\Documents\Canadian....\FileImportSettings.config""",0

在Powershell中帶有空格的文件名。

簡單的powershell命令,在( 8.3別名)路徑中沒有空格:

==>powershell (gc .\$env:USERNAME\yyyy.txt) -replace 'efg h','E FGH'
xxx1 abc D
xxx2 E FGH
xxx3 ijk L

准備(長)文件名,並在路徑(字符串串聯)中加空格。 單引號導致文字值被回顯。 雙引號導致變量的實際值被回顯):

powershell (gc $("'.\'"+$env:USERNAME+"'\yyyy.txt'")) -replace 'efg h','E FGH'

用(長)文件名替換( 8.3別名)路徑,並在路徑中添加空格:

powershell (gc $("'.\'"+$env:USERNAME+"'\yy yy.txt'")) -replace 'efg h','E FGH'

管道: 輸出文件。

我們必須逃離| 在下一個命令PoverShell豎線字符將其轉發給PoverShell ; 否則,它將在cmd shell中應用,並且'out-file' is not recognized as an internal or external command, operable program or batch file錯誤。

powershell (gc $("'.\'"+$env:USERNAME+"'\yy yy.txt'")) -replace 'efg h','E FGH' ^| out-file $("'.\'"+$env:USERNAME+"'\yy yy.txt'")

VBScript中。

所有一倍內"雙引號。需要使用絕對路徑 ,文件名稱為另一個工作目錄...

' 30064463
option explicit
Dim cmdLine, objShell
cmdLine = "powershell (gc $(""'D:\bat\'""+$env:USERNAME+""'\yy yy.txt'"")) -replace 'efg h','E FGH' ^| out-file $(""'D:\bat\'""+$env:USERNAME+""'\yy yy.txt'"")"
Wscript.Echo cmdLine
Set objShell = WScript.CreateObject("WScript.Shell")
Objshell.Run "cmd /C " & cmdLine, 1, true
Wscript.Quit

輸出。

==>type  "D:\BAT\%username%\yy yy.txt"
xxx1 abc D
xxx2 efg H
xxx3 ijk L

==>cscript D:\VB_scripts\SO\30064463.vbs
powershell (gc $("'D:\bat\'"+$env:USERNAME+"'\yy yy.txt'")) -replace 'efg h','
E FGH' ^| out-file $("'D:\bat\'"+$env:USERNAME+"'\yy yy.txt'")

==>type  "D:\BAT\%username%\yy yy.txt"
xxx1 abc D
xxx2 E FGH
xxx3 ijk L

==>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM