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

移动具有特定名称的所有文件(排序)WINDOWS 8,windows,powershell,batch-file,wildcard,Windows,Powershell,Batch File,Wildcard,好的,所以我有大量的电子书和其他文件,我想按作者的名字分类到文件夹中。我通常在Linux中这样做的方式在我的Windows 8笔记本电脑上不起作用。我一直在使用Powershell,但是如果Python中有更好的方法或者使用bash脚本,我愿意使用最简单的方法。我需要它递归地工作,因为有很多子文件夹(很多按类型排序)。到目前为止,我尝试的是: mkdir 'C:\Users\Amanda\Downloads\BOOKS\Peter Straub' Copy-Item 'C:\Users\Aman

好的,所以我有大量的电子书和其他文件,我想按作者的名字分类到文件夹中。我通常在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的目录。如果我把它改成~\Downloads*Peter Straub**,它就是不起作用。我尝试使用-match和-contains,但它们也无法正常工作。我对在Windows8中编写脚本比较陌生,非常感谢任何人的帮助。我想实现readhost-prompt,这样我就不必每次运行脚本时都编辑它。我希望它能够移动文件,不仅仅是复制,而且移动项没有递归选项。所以我可以把脚本复制下来,然后删除原稿。我也试过:

$author = (read-host -prompt 'Enter Name')
mkdir 'C:\Users\Amanda\Downloads\BOOKS\$author'
Copy-Item 'C:\Users\Amanda\Downloads\*$author*.*' -Recurse | Remove-Item 
但这也不起作用。我想让这样的东西在一个自动批处理工作

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

编辑::: 所以基本上我把这三个答案的建议结合起来了,我得到的效果非常好!下面是有效的.bat:

再次编辑: 因此,我尝试了修改后的版本,试图让它接受空格:

它可以正确地创建目录,但不会移动文件

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%"
这应该行得通。如果没有,请发表评论,以便我可以修复它。

尝试以下操作:

@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%"
$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
}

批量尝试此操作,或将命令行中的%%替换为%。如果这对您有帮助,请标记为正确答案。要添加用户提示,只需添加这一行
set/p“Author=Enter Name:”
,并将“Peter Straub”替换为
“%Author%”
我将md%Author%与上述内容组合在一起,就可以了!非常感谢你们!!!!!!我如何处理空格,第一个我刚刚使用straub,因为它是一个唯一的名称,但由于Stephen King工作不正常,我在提示符中尝试了“Stephen King”,得到的只是一个文件,上面写着“Stephen King”作为标题,我也尝试了“Stephen King”,得到了相同的结果。。。如果没有,请阐述这个问题<代码>;)我使用了此建议中的md%作者%。非常感谢。错误:复制项目:找不到路径“C:\Users\Amanda\Downloads\BOOKS\stephen king\”的一部分。第12行字符:3+复制项$。.FullName“$destdir\”+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~类别信息:未指定:(:)[Copy Item],DirectoryNotFoundException+fullyQualifiederroId:System.IO.IO.DirectoryNotFoundException,Microsoft.Commands在
$autho。在将字符串赋给变量之前修剪字符串。我现在看到了。非常感谢。但现在它只是说拒绝许可,但这是一个无关的问题。我需要找到哪些文件被阻止。如果目录中有名称,而不仅仅是其中的文件,是否有办法使其移动整个目录?请在
$\u.psicContainer
之前删除
-not
@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%"
$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
}