我发现this question,非常与我想要的相似,但我无法让它发挥作用。
我想在C:\ ToProcess的每个子目录的XML目录上运行process.exe。如果我手动完成,50个左右的命令中的前6个看起来像这样:
process.exe -switch1 -switch2 -i "C:\ToProcess\abx\XML" -o "C:\Processed\abx\XML"
process.exe -switch1 -switch2 -i "C:\ToProcess\dez\XML" -o "C:\Processed\dez\XML"
process.exe -switch1 -switch2 -i "C:\ToProcess\ghm\XML" -o "C:\Processed\ghm\XML"
process.exe -switch1 -switch2 -i "C:\ToProcess\jkq\XML" -o "C:\Processed\jkq\XML"
process.exe -switch1 -switch2 -i "C:\ToProcess\mn0\XML" -o "C:\Processed\mn0\XML"
process.exe -switch1 -switch2 -i "C:\ToProcess\pq2\XML" -o "C:\Processed\pq2\XML"
但在运行这些命令之前,我必须这样做,因为目标文件夹尚不存在:
md "C:\Processed\abx"
md "C:\Processed\dez"
md "C:\Processed\ghm"
md "C:\Processed\jkq"
md "C:\Processed\mn0"
md "C:\Processed\pq2"
md "C:\Processed\abx\XML"
md "C:\Processed\dez\XML"
md "C:\Processed\ghm\XML"
md "C:\Processed\jkq\XML"
md "C:\Processed\mn0\XML"
md "C:\Processed\pq2\XML"
那么,有没有办法在几个命令中完成所有这些?
答案 0 :(得分:6)
这应该有效。如果它们不存在,它将创建每个目标目录,然后在每个目录目录上运行process.exe。
Get-ChildItem C:\ToProcess\*\XML | ForEach-Object {
$newPath = $_.FullName.Replace("ToProcess","Processed");
New-Item $newPath -ItemType Directory -ErrorAction SilentlyContinue;
.\process.exe -switch1 -switch2 -i $_.FullName -o $newPath;
}
更新:在评论后的流程之前添加。\
答案 1 :(得分:1)
是否需要单行?如果您可以在PowerShell脚本中执行此操作,那么您可以执行以下操作:
foreach ($path in (get-childitem -recurse | foreach-object -process { if ($_.FullName.EndsWith("\xml")) {$_.FullName} }))
{
$newpath = $path.Substring(0,$path.LastIndexOf("\xml"));
$newpath = $newpath.Substring($newPath.LastIndexOf("\"));
$newpath = "c:\processed" + $newpath + "\xml";
[IO.Directory]::CreateDirectory($newpath);
}
当然,您需要在该foreach循环中执行您的process.exe。