将包含哪些名称包含哪些工作SOW的文件移动到目标子目录

时间:2014-12-18 18:06:34

标签: powershell batch-file for-loop move

所以我想移动所有包含单词' SOW'在目录的所有子目录中,每个子目录中的子目录。示例:如果在sub2中有一个名为firstsow.txt的文件,我想将其移动到sub 2 / SOW。我设法用命令"移动 SOW SOW"来做到这一点。这工作正常,但是当我尝试通过运行命令递归地运行它,不确定这是否是正确的术语,对于所有子目录(sub 1,sub 2 ect ..),

for /r %a in (example/*) do call sow.bat

这是我调用的sow.bat文件:

move *SOW* SOW

我收到一条消息,上面写着"无法将多个文件移动到单个文件中#34;。这条消息意味着我的脚本试图做什么?

2 个答案:

答案 0 :(得分:1)

由于PowerShell被标记为:

$path = "c:\temp"
$toMatch = "SOW"

$files = Get-ChildItem $path -Recurse -Filter "*$toMatch*" | Where-Object{!($_.PSIsContainer)} 
$files | ForEach-Object{
    # Found a file with $toMatch in the title 
    If(!(Test-Path "$($_.DirectoryName)\$toMatch")){[void](New-Item -ItemType Directory -Name $toMatch -Path $_.DirectoryName)}
    Move-Item $_.FullName -Destination "$($_.DirectoryName)\$toMatch"
}

查找标题中包含$toMatch的所有文件,并在$files中收集这些文件。对于每个文件,查看同一目录中是否存在名称为$toMatch的文件夹。如果没有创建文件夹。然后将该文件移动到目录中。

使用少量文件进行测试,它似乎有效。

答案 1 :(得分:0)

这应该做你想要的:

for /R %a in (example\*SOW*) do move "%a" "%~Pa\SOW"

在命令行中执行上一个命令。如果要将其包含在批处理文件中,请将百分号加倍。