所以我想移动所有包含单词' 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;。这条消息意味着我的脚本试图做什么?
答案 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"
在命令行中执行上一个命令。如果要将其包含在批处理文件中,请将百分号加倍。