从.cmd文件

时间:2015-12-22 21:11:57

标签: windows powershell cmd unzip

我正在尝试从.cmd文件运行构建任务,其中Powershell提取zip文件,这有助于避免Visual Studio对目录字符数量的限制。但是,我在使Powershell命令正确执行时遇到问题。我已尝试使用引号进行多种变体操作,并且我得到终止错误,或者Powershell命令输出为未提取zip文件的字符串。下面是我当前.cmd文件的示例:

//%1% is a passed in command line argument for the absolute path, e.g. C:\path\to\dir
set Source=%1%directory.zip
set Destination=%1%directory
powershell -Command $pscmd = '{Add-Type -assembly "system.io.compression.filesystem";[io.compression.zipfile]::ExtractToDirectory("%Source%", "%Destination%");}'; Write-Host $pscmd;

如果此任务在命令行上运行,使用Powershell,并且可以从我们触发的.cmd文件执行,那么我对许多可以使其工作的变体非常开放。应用程序的构建过程。如果需要,我很乐意提供更多信息。谢谢!

1 个答案:

答案 0 :(得分:0)

这是一个奇怪的。上面的代码中有一些隐藏的字符。我拿了代码并在记事本中打开它,保存为ANSI,当你输入命令行或在新的记事本实例中再次打开它时,你可以看到错误。

add-type和ExtractToDirectory都没有输出,所以我删除了你的pscmd var。

我会打开您现有的脚本,将ansi另存为新文件名,删除原始文件,将新文件重命名为原始名称。

以下是我为解决您的脚本问题而提出的问题,它可以在我的计算机上运行。

我将脚本命名为L:\util\unzip.cmd

setlocal
//%1% is a passed in command line argument for the absolute path, e.g. C:\path\to\dir
set _Source='%1\directory.zip'
set _Destination='%1\directory'
echo _Source=%_Source%
echo _Destination=%_Destination%
set _c1=Add-Type -assembly system.io.compression.filesystem;
set _c2=[io.compression.zipfile]::ExtractToDirectory(%_Source%, %_Destination%)
echo _c1=%_c1%
echo _c2=%_c2%
set _Command=^& {%_c1% %_c2%};
: to echo, use double quotes or cmd thinks text after & is another command
echo _Command="%_Command%"
pause

powershell -Command "%_Command%"

endlocal

我按照这样运行它,它起作用了:unzip.cmd L:\util

我打赌这个信息,你很高兴。