maztips
@maztips (sushiat)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

記号"."が複数入ったファイル名をrenコマンドで一括変換したい

解決したいこと

同一ディレクトリ内に

○○○○_Daily.20010101.7.nc4.nc4
○○○○_Daily.20010102.7.nc4.nc4
.
.
.
○○○○_Daily.20071231.7.nc4.nc4

という一連のNetCDF4ファイルがあり、これを"20010101.nc4"といった形に一括変換したいです。
Windows10のコマンドプロンプトでrenコマンドで変換を試みたところ、いずれのファイル名も変換されず、エラーメッセージも表示されませんでした。
ファイル数が多いのでなるべくコマンドで解決したいと考えています。

発生している問題・エラー

エラーメッセージ無し

該当するソースコード

ren ○○○○_Daily.*.7.nc4.nc4 *.nc4

自分で試したこと

同じディレクトリにつくった適当なファイルは変換できたので、パスの間違いや、renコマンドが動作しないわけではないようです。
試しに○○○○.txt.txtというファイルを作り、○○○○.txtというファイル名に変換しようとしたところ、これもできなかったので、複数の拡張子(.)が原因だと考えています。

0

3Answer

Comments

  1. @maztips

    Questioner

    すでに同様の質問があったのですね。情報提供していただきありがとうございます。ファイル名末尾 ".7.nc4.nc4" を ".nc4" に変換することができました。
    ただ、".20010101" の拡張子 "." を同様の方法で消去すると日付部分の文字列も消えてしまいます。日付部分を残して拡張子 "." だけを消去する方法がお分かりでしたら教えていただきたいです。

原因

ren ○○○○_Daily.*.7.nc4.nc4 *.nc4

新しい名前として指定された*.nc4のワイルドカード*は、任意の文字数にマッチします。
従って、○○○○_Daily.20010101.7.nc4にもマッチします。
マッチした部分の後に.nc4を付けるので元の名前と同じになります。

対処

ren ○○○○_Daily.*.7.nc4.nc4 ○○○○_Daily.????????.7.nc4

元の名前の*に相当する部分は、20010101のように長さが決まっているようですから、任意の1文字を表すワイルドカード?で表現することで、変更後の名前の長さを明示できます。

追記

_y_sさんの紹介された手法を使うと、この場合は以下だけで可能みたいですね。

ren *.nc4.nc4 *.
1Like

Comments

  1. @maztips

    Questioner

    回答ありがとうございます。ファイル名末尾 ".7.nc4.nc4" を ".nc4" に変換することができました。
    ただ、".20010101" の拡張子 "." を同様の方法で消去すると日付部分の文字列も消えてしまいます。(ワイルドカード?を使用してもできませんでした。)日付部分を残して拡張子 "." だけを消去する方法がお分かりでしたら教えていただきたいです。
  2. `○○○○_Daily.20010101.7.nc4`

    `○○○○_Daily.20010101`
    ということでしょうか?

    あるいは、
    `○○○○_Daily.200101017.nc4`
    ということでしょうか?

    お試しになったコマンドと併せて、具体的にお示しいただけると助かります。
  3. @maztips

    Questioner

    '○○○○_Daily.20010101.7.nc4.nc4'

    '20010101.nc4'
    という変換が目的でした。
    (最後の1つ以外のすべての'.'を消去し、'○○○○_Daily'もついでに消去)

    コマンドプロンプトのrenコマンドでは'.20010101'が1つの拡張子と認識され、'20010101'を残したまま'.'単体を消去することができませんでした。
    (方法は存在するかもしれないですが、私はわかりませんでした。)
    試したコマンドは辿ることができず、表示できません。申し訳ありません。


    Windows PowershellのRename-Itemを試したところ、'.'がただの文字と認識されるようで、'.'単体を消去することができました。

    拙い質問でしたが、丁寧に回答してくださりありがとうございました。
  4. お役に立てず申し訳ありません。
    解決できて良かったです。

"3B42_Daily." は、Windows PowershellでRename-Itemコマンドを使うことで消去できました。
コマンドプロンプトのRenameコマンドと違い、拡張子 ". "をほかの文字と同様に扱うようです。
@_y_sさん、@tetr4labさん、回答ありがとうございました。

Get-ChildItem | Rename-Item -NewName{$_.Name -Replace '3B42_Daily.', ''}
0Like

Your answer might help someone💌