移动具有特定名称的所有文件(排序)WINDOWS 8

时间:2013-10-23 18:34:26

标签: windows powershell batch-file wildcard

好的,所以我有大量的电子书和其他文件,我想按作者名称排序到文件夹中。我通常在Linux中执行此操作的方式将无法在我的Windows 8笔记本电脑上运行。我一直在使用Powershell,但是如果在Python中有更好的方法或使用bash脚本,我愿意使用最简单的方法来完成。我需要它以递归方式工作,因为有许多子文件夹,(很多按类型排序)。到目前为止我尝试的是:

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的目录。如果我改为〜\下载* Peter Straub *。*它只是不起作用。我尝试使用-match和-contains,但它们也无法正常工作。我对Windows 8中的脚本相对较新,非常感谢任何人的帮助。我想实现read-host -prompt,所以每次运行它都不需要编辑脚本。我希望它实际上移动文件而不仅仅是复制,但Move-Item没有recurse选项。所以我可以以某种方式拥有脚本副本然后删除原始。我也尝试了这个:

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

但这也行不通。我希望得到这样的东西在自动批处理中工作。

所以基本上我想选择一个作者名称,使用该作者名称创建一个新目录,然后搜索并将包含该作者名称的所有文件移动到新目录中。

修改的:::: 所以基本上我结合了三个答案的建议和我完美的工作!这是工作的.bat:

@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%")

它在制作目录时可以正常工作,但它不会移动文件。

3 个答案:

答案 0 :(得分: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 :(得分: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%"

答案 2 :(得分: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
}