代码之家  ›  专栏  ›  技术社区  ›  Christopher

在每个具有假定路径组件的目录上使用PowerShell运行命令

  •  1
  • Christopher  · 技术社区  · 15 年前

    我发现 this question ,即 非常 和我想要的差不多,但我就是做不到。

    我想跑进程.exe在C:\ToProcess的每个子目录的XML目录上。如果我用手来做的话,大约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"
    

    那么,有没有一种方法可以在几个命令中完成所有这些呢?

    2 回复  |  直到 8 年前
        1
  •  6
  •   Matthew Manela    15 年前

    这应该管用。它将创建每个不存在的目标目录,然后运行进程.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;
    }
    

        2
  •  1
  •   nithins    15 年前

    需要是单行线吗?如果可以在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);
    }
    

    当然你需要执行你的命令进程.exe在foreach循环中。

    推荐文章