2013-10-23 32 views
3

好吧,所以我有大量的電子書和其他文件,我想按作者姓名排序到文件夾中。我通常在Linux中執行此操作的方式不適用於我的Windows 8筆記本電腦。我一直在使用Powershell,但是如果在Python中有更好的方法或者使用bash腳本,我願意用最簡單的方法來完成這個任務。我需要它遞歸地工作,因爲有很多子文件夾,(很多都是按流派排序的)。我到目前爲止所嘗試的是:用特定名稱移動所有文件(排序)WINDOWS 8

mkdir 'C:\Users\Amanda\Downloads\BOOKS\Peter Straub' 
Copy-Item 'C:\Users\Amanda\Downloads\*Peter Straub*' -recurse ` 
'C:\Users\Amanda\Downloads\BOOKS\Peter Straub' 

不幸的是,我只能查找名爲peter straub的目錄。如果我將其更改爲〜\ Downloads * Peter Straub *。*它不起作用。我嘗試過使用-match和-contains,但是它們都無法正常工作。我對Windows 8中的腳本編程相對來說比較陌生,並且非常感謝任何人的幫助。我想實現read-host -prompt,所以我不必每次運行腳本都要編輯腳本。我希望它實際上移動文件不只是複製,但Move-Item沒有遞歸選項。所以我可以以某種方式將腳本複製並刪除原始文件。我也試過這個:

$author = (read-host -prompt 'Enter Name') 
mkdir 'C:\Users\Amanda\Downloads\BOOKS\$author' 
Copy-Item 'C:\Users\Amanda\Downloads\*$author*.*' -Recurse | Remove-Item 

但是這也行不通。我希望得到像這樣的東西在自動化批處理中工作。

所以基本上我想選擇作者姓名,使用該作者姓名創建一個新目錄,然後搜索並將包含該作者姓名的所有文件移動到新目錄中。

編輯 :::: 所以基本上我結合了三個答案的建議,我得到了什麼完美的作品!這裏是工作的蝙蝠:

@echo off &setlocal 
set /p "Author=Enter Name: " 
md "%author%" 
for /f "delims==" %%i in ('dir C:\Users\Amanda\Downloads /b /s^|find "%author%" /i') do (move "%%i" "C:\Users\Amanda\Downloads\BOOKS\%author%") 

再次編輯: 於是,我就修改後的一個嘗試,並得到它的接受空間:

@echo off &setlocal 
set /p "Author=Please enter an Author: " 
md "C:\Users\Amanda\Downloads\BOOKS\%author%" 
for /f "delims==" %%i in ('dir C:\Users\Amanda\Downloads /b /s^|find "%author: =.%" /i') do (move "%%i" "C:\Users\Amanda\Downloads\BOOKS\%author%") 

它正常工作在使目錄但它不移動的文件。

回答

1

試試這個:

$author = (read-host -prompt 'Enter Name') 

$basedir = 'C:\Users\Amanda\Downloads' 
$destdir = "$basedir\BOOKS\$author" 
New-Item $destdir -Type directory 

Get-ChildItem $basedir -Recurse | ? { 
    -not $_.PSIsContainer -and 
    $_.Name -like "*$author*" -and 
    $_.Directory.FullName -ne $destdir 
} | % { 
    Copy-Item $_.FullName "$destdir\" 
    Remove-Item $_.FullName 
} 
+0

錯誤: 複製-項目:找不到路徑的一部分「C:\用戶\阿曼達\下載\ BOOKS \斯蒂芬金\」。 在行:12字符:3 +拷貝項目$ _全名 「$ DESTDIR \」 + ~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~ + CategoryInfo:NotSpecified:(:) [Copy-Item],DirectoryNotFoundException + FullyQualifiedErrorId:System.IO.DirectoryNotFoundException,Microsoft.PowerShell.Commands.CopyItemCommand – amandakay10

+1

在$ $ author中有尾隨空格'。在將字符串分配給變量之前修剪字符串。 –

+0

我現在看到了。謝謝。但現在它只是說拒絕了權限,但這是一個無關緊要的問題。我需要找到哪些文件被阻止。 – amandakay10

2
set /p author=Please enter an Author: 
md "C:\Users\Amanda\Downloads\BOOKS\%author%" 
for /f "delims==" %%i in ('dir C:\Users\Amanda\Downloads /b /s^|findstr "%author: =*%"') do (move "%%i" "C:\Users\Amanda\Downloads\BOOKS\%author%" 

這應該工作。如果沒有,請評論,以便我可以修復它。

+1

試試這個批處理或用%替換爲%%的命令行。如果這對你有幫助,請標記爲正確答案。 – nephi12

+2

要添加用戶提示,只需添加此行'set/p「作者=輸入姓名:」'並用'「%作者%」替換「Peter Straub」' –

+0

我將md%author%與上述內容合併成功了!非常感謝你們!!!!!! – amandakay10

1
@echo off &setlocal 
set /p "author=Enter the author's name: " 
cd /d "C:\Users\Amanda\Downloads" 
md "books\%author%" 
for /r %%a in (*"%author%"*) do move "%%~fa" "books\%author%" 
+0

我從這個建議中使用了md%author%。謝謝! – amandakay10

相關問題