• ベストアンサー

リネームに適したツールを教えて下さい

windowsです 以下のようなフォルダの先頭ファイルを、フォルダ名としたいです フォルダ1 └ファイル1 └ファイル2 フォルダ2 └ツール1 └ツール2 処理後 ファイル1 └ファイル1 └ファイル2 ツール1 └ツール1 └ツール2 flexible renamerではこういう処理はできないみたいですが、このような処理がしやすいツールはありますか? cmdよりもlinuxを入れたほうがいいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • _kappe_
  • ベストアンサー率68% (1581/2304)
回答No.7

> どちらが優れているかわかりませんか 適切なプログラムを書けばご希望の仕様でフォルダ名を変えられる点ではどちらも今回の要求を満たしているわけで、優劣をつける対象ではないと思います。ご自分が使いやすいと思うものを使えばいいです。その判断基準を持っていないからこそ質問しているのでしょうけれど。 https://okwave.jp/qa/q9847153.htmlではPerlのプログラムを書いた回答者もいますね。 Windows 10で実行する場合、Pythonは自分でインストールする必要があるのに対して初めから標準で入っている点でPowerShellが有利と言えます。 一方、今の流行りのプログラミング言語という意味でならPythonのほうが上でしょう。 参考 https://news.mynavi.jp/article/20210106-1622147/ 個人的にはPowerShellは何となく読みにくいのであまり好みではありませんが、慣れの問題です。

その他の回答 (6)

  • _kappe_
  • ベストアンサー率68% (1581/2304)
回答No.6

>リネーム処理はpowershellよりpythonのほうが楽なのですか? 自分が書き慣れている言語で書いてみただけです。

inudaisukidesu
質問者

お礼

どちらが優れているかわかりませんか

  • _kappe_
  • ベストアンサー率68% (1581/2304)
回答No.5

ここの回答欄だと行頭の空白が消えてしまうのを忘れていました。 消えないように□を入れて再投稿します。□をタブ文字などで置き換えて保存し実行してください。 import sys import pathlib def rename_dir(dirname): □d = pathlib.Path(dirname) □if d.is_dir(): □□files = sorted(list(d.glob("*"))) □□if files: □□□d.rename(d.with_name(files[0].name)) args = sys.argv for dirname in args: □rename_dir(dirname)

inudaisukidesu
質問者

補足

リネーム処理はpowershellよりpythonのほうが楽なのですか?

  • _kappe_
  • ベストアンサー率68% (1581/2304)
回答No.4

Pythonを使ってプログラムを書いてみました。 rename.pyというファイル名で保存して「python rename.py フォルダ1 フォルダ2」のように指定して実行します。 ディレクトリ名の指定が間違っていた場合やディレクトリ内にファイルが一つも存在しなかった場合には対応してありますが、考慮漏れがあるかもしれません。 import sys import pathlib def rename_dir(dirname): d = pathlib.Path(dirname) if d.is_dir(): files = sorted(list(d.glob("*"))) if files: d.rename(d.with_name(files[0].name)) args = sys.argv for dirname in args: rename_dir(dirname)

  • _kappe_
  • ベストアンサー率68% (1581/2304)
回答No.3

複数のファイルをファイル名で並べたときにどれが先頭か?というのは実はそんなに簡単な話ではありません。 ファイル7 ファイル8 ファイル9 ファイル10 この4つのファイル名を昇順(小→大の順序)に並べると、単純なプログラムでは「ファイル10」「ファイル7」「ファイル9」「ファイル8」の順になります。「1」は「7」よりも小さいからです。 「ファイル7」を先頭にしたいという人もいるでしょうが、その要望に応えようとするとなかなか厄介です。

  • ballville
  • ベストアンサー率47% (233/487)
回答No.2

ワンライナーならこんな感じ (get-item フォルダ1・2の親フォルダ).getDirectories()|%{$_.moveto([io.path]::GetFileNameWithoutExtension(($_.getfiles()|sort-object)[0]))}

inudaisukidesu
質問者

補足

"1" 個の引数を指定して "MoveTo" を呼び出し中に例外が発生しました: "パス 'sample' へのアクセスが拒否されました。" 発生場所 行:1 文字:42 + ... ctories()|%{$_.moveto([io.path]::GetFileNameWithoutExtension(($_.getf ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : IOException こういうエラーになるんですが、権限を変更するということですか?

  • ballville
  • ベストアンサー率47% (233/487)
回答No.1

powershellが最適だと思います 「先頭ファイル」の意味が不明なので書けませんが 数行で(あるいはワンライナーで)できる処理だと思います

inudaisukidesu
質問者

補足

先頭ファイルは名前で並べ替えた場合です 1,2,3,4なら 1が先頭です

関連するQ&A