好的,所以我有大量电子书和其他文件,我想按作者姓名将它们分类到文件夹中。我通常在 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 但它们也无法正常工作。我对 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
但这也没有用。我很想让这样的东西在自动化批处理中工作。
所以基本上我想选择一个作者姓名,使用该作者姓名创建一个新目录,然后搜索并将包含该作者姓名的所有文件移动到新目录中。
编辑:::: 所以基本上我结合了三个答案的建议和我得到的完美作品!这是有效的.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%")
它在制作目录时可以正常工作,但不会移动文件。