2014-12-18 48 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