0

我试图通过批处理文件传递 REPLACE 命令来找出解决方案,因为当使用 REPLACE 选项执行文件时,“ReplaceTagsOnConfigFiles.ps1”将起作用,否则,它将要求 [REPLACE | 回滚]

下面是批处理文件:

echo "Changing the execution policy"
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command {Set-ExecutionPolicy} > C:\Temp\a.out

echo "Updating the Server details:"

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command "D:\test\Bluebird_1.2.0_RTM\ReplaceTagsOnConfigFiles.ps1;REPLACE" > C:\Temp\b.out

执行上述批处理文件时,会弹出如下所示的消息。

可用命令:
* 替换所有字符串以从每个 .config 和 .x aml 文件中获取新配置。
* 删除当前配置并检索旧配置(之前必须执行替换)。

ReplaceTagsOnConfigFiles.ps1 [替换 | ROLLBACK]

REPLACE 替换每个 .config 和 .xaml 文件中的所有字符串以构建新配置。
ROLLBACK 从备份中检索旧配置。注意:此选项仅在您之前使用“替换”选项时才有用。


没有文件被替换

请在这方面帮助我。

4

2 回答 2

1

更改此命令:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command "D:\test\Bluebird_1.2.0_RTM\ReplaceTagsOnConfigFiles.ps1;REPLACE" > C:\Temp\b.out

进入这个:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File "D:\test\Bluebird_1.2.0_RTM\ReplaceTagsOnConfigFiles.ps1" REPLACE > C:\Temp\b.out

第一个命令是否应该更改执行策略?如果是这样,您需要指定一个实际的策略。Set-ExecutionPolicy没有任何论据是行不通的。-ExecutionPolicy Bypass此外,添加到第二个命令会更简单:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File "D:\test\Bluebird_1.2.0_RTM\ReplaceTagsOnConfigFiles.ps1" REPLACE > C:\Temp\b.out
于 2013-07-13T11:00:17.023 回答
0

您收到的错误不是直接来自 PowerShell。其中大部分(除了最后一行)来自ReplaceTagsOnConfigFiles.ps1。问题是该脚本需要REPLACEROLLBACK作为参数(如错误消息所示),但您没有传递任何参数。分号是命令分隔符(就像在 cmd 中使用与号一样),因此您告诉 PowerShell 首先D:\test\Bluebird_1.2.0_RTM\ReplaceTagsOnConfigFiles.ps1不带参数地自行执行。然后,您REPLACE再次执行命令,不带任何参数。这就是给你“没有文件被替换”错误的原因。

您需要做的就是用空格替换分号,使REPLACE成为ReplaceTagsOnConfigFiles.ps1的参数,而不是新命令。


顺便说一句,说到&符号,在 PowerShell 中它们用于执行非本机命令(包括 .ps1 脚本文件)。您在此处使用它的方式是有效的,因为路径中没有空格,但是如果您需要引用路径,则会遇到问题(Powershell 会将其作为字符串回显,而不是执行它)。你应该养成这样做的习惯:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command "& 'D:\test\Bluebird_1.2.0_RTM\ReplaceTagsOnConfigFiles.ps1' REPLACE" > C:\Temp\b.out
于 2013-07-13T19:22:58.017 回答