2013-07-13 155 views
0

我想通过REPLACE命令通过批处理文件来找出解决方案,因为“ReplaceTagsOnConfigFiles.ps1”将在REPLACE选项或其他情况下执行该文件时起作用将要求[REPLACE | ROLLBACK]从批处理脚本传递参数到PowerShell脚本失败

下面是批处理文件:

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 [REPLACE | ROLLBACK]

REPLACE替换每个.config和.xaml文件中的所有字符串以构建新配置。
ROLLBACK从备份中检索旧配置。注意:如果您之前使用'替换',此选项很有用。


号文件所取代

请帮我在这方面。

回答

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 
+0

当我改变了上面并执行它作为批处理文件,我找不到任何生成日志文件,并试图将其拖放到命令删除该批处理文件时提示,它会抛出如下信息:警告 已经有一些后退文件。你想继续这个过程吗? [Y]是[N]否[?]帮助(默认是“N”):是的 – user2578953

+0

我不认为您的执行策略处理正如您所期望的那样工作。查看更新的答案。如果没有看到你的PowerShell代码,就不能说出警告。 –

+0

我无法将代码粘贴到此处。有没有其他解决方案,这一个。 – user2578953

0

你得到的错误并不能直接从PowerShell的。大部分(除最后一行外)均为ReplaceTagsOnConfigFiles.ps1。问题是这个脚本需要将REPLACEROLLBACK作为参数(如错误消息所示),但是您传递的参数不是参数。分号是一个命令分隔符(就像在cmd中使用&符号一样),所以你要让PowerShell首先自己执行D:\test\Bluebird_1.2.0_RTM\ReplaceTagsOnConfigFiles.ps1,而且没有参数。然后,您正在执行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 
+0

由于您刚刚接触过stackoverflow,请注意,如果答案可解决您的问题,则应点击该答案左侧的复选标记以将其标记为已接受。 –

相关问题