前提・実現したいこと
バッチファイルにD&Dしたファイルをpythonで読み込み、ファイル名ごとにフォルダ分けがしたい
具体的には
(xxx) [yyy (zzzz)]123456.zip を D&D した際に、指定したフォルダ(D:\sagyo\aaa\yyy(zzzz)\)に ファイル名の[]内のフォルダ名の下に移動する(フォルダがなければ作成する)
C:(xxx) [yyy (zzzz)]123456.zip をバッチファイルにD&D した際に
D:\sagyo\aaa\yyy(zzzz)(xxx) [yyy (zzzz)]123456.zip
のように移動していてほしいということです。
また、ファイル名に2つの[]が現れた際(入れ子でない)は、最初の[]を採用するようにもしておきたいです。(re.searchは最初の検索結果を採用すると書いてあったので採用しています。)
例:(xxx) [yyy (zzzz)]123456[aaa].zip なら[yyy (zzzz)]を採用。
見よう見まねでコードを書いてみたのですが、どうして動かないのか分からないので、ご教授願いたいです。
正規表現は試行錯誤すれば書ける(かつ私の環境での汎用性が高くなる)ので、できれば正規表現は使いたいです。
よろしくお願い致します。
発生している問題・エラーメッセージ
D:\sagyo>python zip.py "D:\sagyo(xxx) [yyy (zzzz)]123456.zip" zip.py -> D:\sagyo\aaa\None\None Traceback (most recent call last): File "C:\Users\---\AppData\Local\Programs\Python\Python37\lib\pathlib.py", line 1258, in mkdir self._accessor.mkdir(self, mode) OSError: [WinError 123] ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。: "D:\sagyo\aaa\<re.Match object; span=(15, 27), match='[yyy (zzzz)]'>" During handling of the above exception, another exception occurred: Traceback (most recent call last): File "zip.py", line 14, in <module> File "C:\Users\---\AppData\Local\Programs\Python\Python37\lib\pathlib.py", line 1267, in mkdir if not exist_ok or not self.is_dir(): File "C:\Users\---\AppData\Local\Programs\Python\Python37\lib\pathlib.py", line 1358, in is_dir return S_ISDIR(self.stat().st_mode) File "C:\Users\---\AppData\Local\Programs\Python\Python37\lib\pathlib.py", line 1168, in stat return self._accessor.stat(self) OSError: [WinError 123] ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。: "D:\sagyo\aaa\<re.Match object; span=(15, 27), match='[yyy (zzzz)]'>"
該当のソースコード
dos
1python zip.py %1 2timeout 100
python
1import shutil 2from pathlib import Path 3import sys 4import re 5 6output_dir = Path("D:/sagyo/aaa") # 出力ディレクトリ 7 8for path in sys.argv: 9 name = re.search(r'[.*]' , path) 10 name = str(name) 11 12 # サブディレクトリを作成する。 13 output_subdir = output_dir / name 14 output_subdir.mkdir(parents=True, exist_ok=True) 15 16 # 移動先のファイルパス 17 output_path = output_subdir / name 18 print(f"{path} -> {output_path}") 19 20 # ファイルを移動する。 21 shutil.move(path, output_path) 22 23pause
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/15 06:47