2014-12-18 54 views
0

所以我想搬到包含在一个目录下的所有子目录单词“SOW”在每个子目录子目录中的所有文件名移动文件。例如:如果在sub2中有一个名为firstsow.txt的文件,我想将它移动到sub 2/SOW。我成功地做到这一点用命令“移动SOW SOW”。这工作得很好,但是当我试图递归运行它,不知道这是正确的术语,对于所有子目录(子1子2等..),通过运行以下命令:包含谁的,它包含了哪些工作,播种,到目标子目录

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

这里是sow.bat文件我打电话:

move *SOW* SOW 

我得到一个消息,说:“不能将多个文件移动到单个文件”。这个消息意味着我的脚本正在尝试做什么?

+0

它已经一段时间,因为我没有任何批处理编程,但我认为错误意味着没有一个名为SOW目录,因此它是假设你是移动到文件名为SOW。它足够聪明,不会让你去尝试,因为除了你想要移动的文件之外,你会失去一切。 –

+0

所有的子目录也包含一个名为SOW的子目录,这可能是一个问题吗? – CornCob

回答

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的同一目录中是否有文件夹。如果没有创建文件夹。然后将该文件移动到目录中。

有少量文件的测试,它似乎工作。

+0

我很抱歉,我以为powershell是命令行的另一个名字。我刚刚了解到我正在使用的计算机安装了PowerShell,但我不知道如何使用它。 – CornCob

+0

非常感谢! – CornCob

+0

@ user2297514欢迎来到PowerShell。 – Matt

0

这应该做你想要什么:

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

在命令行执行以前的命令。如果您想将其包含在批处理文件中,请将百分号加倍。

+0

我运行这个命令,但它没有工作。它也没有之前返回任何埃罗消息 – CornCob

+0

插入和'echo'命令'move',所以我们可能会看到处理的文件名... – Aacini

+0

我插入/ R%的一个“回声” COMAND”中(例如\ * SOW *)当我运行这个命令时,没有发生任何事情,所以做echo动作“%a”“%〜Pa \ SOW”。我在这里错过了些什么fundemental? – CornCob