繁体   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