3

わかりました。大量の電子ブックやその他のファイルがあり、著者名でフォルダに分類したいと思います。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 

しかし、これもうまくいきませんでした。このようなものを自動バッチで動作させたいと思っています。

したがって、基本的には、著者名を選択し、その著者名を使用して新しいディレクトリを作成し、その著者名を含むすべてのファイルを検索して新しいディレクトリに移動します。

EDIT ::::基本的に、3つの回答の提案を組み合わせて、得たものは完全に機能します! 動作した .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%")

ディレクトリの作成では正しく機能しますが、ファイルは移動しません。

4

3 に答える 3

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%"
于 2013-10-23T19:03:53.913 に答える