42

サブディレクトリ内のファイルの名前をバッチで変更する方法はありますか?

例えば:

ディレクトリとサブディレクトリを持つフォルダーに名前を変更*.htmlします。*.htm

4

10 に答える 10

90

Windows コマンド プロンプト: (バッチ ファイル内の場合は、%x を %%x に変更します)

for /r %x in (*.html) do ren "%x" *.htm

これは、ファイルの途中の名前を変更する場合にも機能します

for /r %x in (website*.html) do ren "%x" site*.htm
于 2008-10-29T05:14:39.173 に答える
6
find . -regex ".*html$" | while read line;
 do 
    A=`basename ${line} | sed 's/html$/htm/g'`;
    B=`dirname ${line}`;
    mv ${line} "${B}/${A}";
 done
于 2008-10-29T05:15:11.140 に答える
6

パイソンで

import os

target_dir = "."

for path, dirs, files in os.walk(target_dir):
    for file in files:
        filename, ext = os.path.splitext(file)
        new_file = filename + ".htm"

        if ext == '.html':
            old_filepath = os.path.join(path, file)
            new_filepath = os.path.join(path, new_file)
            os.rename(old_filepath, new_filepath)
于 2008-10-29T05:17:27.763 に答える
4

Bash では、次のことができます。

for x in $(find . -name \*.html); do
  mv $x $(echo "$x" | sed 's/\.html$/.htm/')
done
于 2008-10-29T05:08:53.540 に答える
3

forfiles がある場合 (Windows XP および 2003 以降に付属していると思います)、次のコマンドを実行できます。

forfiles /S /M *.HTM /C "cmd /c ren @file *.HTML"
于 2009-11-23T13:59:13.987 に答える
2

もっとエレガントな方法があると確信していますが、最初に頭に浮かんだのは次のとおりです。

for f in $(find . -type f -name '*.html'); do 
    mv $f $(echo "$f" | sed 's/html$/htm/')
done
于 2008-10-29T05:10:43.160 に答える
2
In bash use command rename :)

 rename 's/\.htm$/.html/' *.htm

 # or

 find . -name '*.txt' -print0 | xargs -0 rename 's/.txt$/.xml/'

 #Obs1: Above I use regex \. --> literal '.'  and  $ --> end of line
 #Obs2: Use find -maxdepht 'value' for determine how recursive is
 #Obs3: Use -print0 to avoid 'names spaces asdfa' crash!
于 2008-10-29T19:43:09.047 に答える
1

Linux では、' rename ' コマンドを使用して、ファイルの名前をバッチで変更できます。

于 2008-10-29T06:11:29.217 に答える
0

Unix では、 rnmを使用できます。

rnm -rs '/\.html$/.htm/' -fo -dp -1 *

または

rnm -ns '/n/.htm' -ss '\.html$' -fo -dp -1 *

説明:

  1. -ns: 名前文字列 (新しい名前)。/n/拡張子なしのファイル名に展開される名前文字列規則です。
  2. -ss: 検索文字列 (正規表現)。一致するファイルを検索します。
  3. -rs: フォームの文字列を置き換えます/search_regex/replace_part/modifier
  4. -fo: ファイルのみモード
  5. -dp: ディレクトリの深さ (-1 は無制限を意味します)。
于 2016-05-07T07:35:25.840 に答える
0

Linux 上の AWK。最初のディレクトリについては、これがあなたの答えです... dir_path で awk を再帰的に呼び出すことによって推定します。おそらく、この正確な awk を以下に書き込む別の awk を書くことによって...などです。

ls dir_path/. | awk -F"." '{print "mv file_name/"$0" dir_path/"$1".new_extension"}' |csh
于 2008-10-29T07:07:20.710 に答える