2015-02-10 177 views
0

我有一个文件(.CMD):如何将.cmd转换为PowerShell脚本?

@echo off 
setlocal 

for /f %%b in (Branches.txt) do (
    set branches=%%b 
) 

call :parse "%branches%" 

goto :eos 

:parse 

set branches=%1 
set branches=%branches:"=% 

for /f "tokens=1* delims=," %%a IN ("%branches%") DO (
    if not "%%a" == "" call :sub %%a 
    if not "%%b" == "" call :parse "%%b" 
) 

goto :eos 

:sub 

echo Starting compilation for branch :[%1] 

goto :eos 

:eos 
endlocal 

其中 “Branches.txt” 包含此:

branch1,branche2,branche3,...,branchn 

剧本抓起,从Branches.txt的最后一行,删除任何引号该字符串,并用逗号分割该行。如果至少有一个元素,则它会使用第一个元素调用sub,并且如果该行在分割时包含两个或更多个元素,则会重新分析删除了第一个元素的字符串。

我需要这个代码,但在PowerShell中.PS1文件

+1

你能否至少解释一下这个批处理正在做什么。对于这个问题有持久力,它需要尝试对社区有用。我是PowerShell的天才业余爱好者,但我不想学习批处理尝试和帮助 – Matt 2015-02-10 13:37:38

+1

@Matt - 脚本抓取Branches.txt中的最后一行,删除字符串中的所有引号,并将行分隔为逗号。如果至少有一个元素,则它会使用第一个元素调用sub,并且如果该行在分割时包含两个或更多个元素,则会重新分析删除了第一个元素的字符串。 – SomethingDark 2015-02-10 14:39:04

+0

@SomethingDark - 确实! – 2015-02-10 14:53:59

回答

3

我觉得这是你将寻找的开始。考虑txt文件branches.txt的以下内容。我引用了最后一行,以表明它们在流程中被删除。

branch1,branche2,branche3 
branch2,branche2,branche3 
"branch3","branche2",branche3" 

代码段

$path = "c:\temp\braches.txt" 
$lastLine = Get-Content -Path $path | Select-Object -Last 1 
$lastLine -replace '"' -split "," | ForEach-Object{ 
    Write-Host "Do something with: $_" 
} 

将产生以下控制台输出。

Do something with: branch3 
Do something with: branche2 
Do something with: branche3 

这将采取文件并将其内容读取为字符串数组。我们采取最后一行,并使用-replace删除报价。然后使用-split我们创建另一个数组。然后可以单独处理该数组的每个元素。

+0

这是正确的。 – 2015-02-10 15:29:28