1

私はこれが何度もカバーされていることを知っていますが、私はまだこの特定の側面に対する良い解決策を得ることができないようです。私はbashとDOSの両方で同じ問題を抱えています。abcYYMMDDf.csvという名前の多くの.csvファイルのファイルがあり、ファイル名を、作成された日付に対応するYYMMDD部分に変更したいと思います。YYMMDDの後の「f」に注意してください。したがって、実際には、Excelのmid()に相当するものに中間の日付を取得させたいと思います。

bashでは、名前変更機能と、バリエーションを試した*ワイルドカードを理解しています。

rename abc*f.csv *.csv abc*

*はYYMMDDの代わりになると考えていましたが、明らかにそうではありませんでした。s /([az] *)を選択する別の方法を見ましたが、それではファイル名全体が確実に使用されますか?

DOSで試しました

ren abc*f.csv *.csv
4

4 に答える 4

2

Bashパラメータ展開を使用すると、プレフィックスの削除とパターンの置換をそれぞれ使用して、「abc」と「f」を2つのステップで削除できます。

for f in abc*f.csv; do
    new_f=${f#abc}
    new_f=${new_f/%f.csv/.csv}
    mv $f $new_f
done

パラメータ展開の代わりに使用sedして、「abc」と「f」を1つのステップで削除できます。

for f in abc*f.csv; do
    new_f=$(echo $f | sed 's/abc\(.*\)f/\1/')
    mv $f $new_f
done

DOSバージョンには答えられません。別の質問でそれを尋ねたほうがいいかもしれません。

于 2012-07-31T12:09:28.723 に答える
2

質問の「DOS」部分の場合:コマンドプロンプト(cmd.exe)を使用してWindowsを使用しており、command.comを使用して実際のDOSを使用していないことを前提としています。

@echo off
setlocal enableDelayedExpansion
for %%F in (abc*f.csv) do (
  set "name=%%F"
  ren "%%F" "!name:~1,6!.csv"
)


アップデート

RENがワイルドカードを処理する方法の規則は、WindowsのRENAMEコマンドがワイルドカードをどのように解釈するかを参照してください。。残念ながら、この状況ではルールは役に立ちません。

于 2012-07-31T13:55:29.733 に答える
0

バッシュ部分の場合(2つのステップで):

rename abc "" abc*
rename f.csv .csv *f.csv

「abc」の部分を空の文字列に置き換えたい(つまり、abcの部分を削除したい)ので、動作するはずです。名前の変更では、ファイル名全体ではなく、置き換える部分のみを指定する必要があります(詳細については、名前の変更のマニュアルページを参照してください)。

2番目のステップでは、末尾の「f」を削除します。

DOS部分の場合:

名前を変更するだけでは解決できないと思います。いくつかのPowershellコマンドを見る価値があるかもしれません...

于 2012-07-31T10:11:54.950 に答える
0

DOS用のソリューションがあります。Excelで必要な文字列を作成し、それらをコピーしてコマンドラインに貼り付けることができます。コマンドラインにコピーしたすべての行が自動的に実行されます。

REN "folderpath \ filename" "newName"

REN "C:\Users\Charlie\Desktop\_Working General\L2795187.HH293.11.xml.csv" "HH293-11.csv"

上記を数式でExcelで作成し、cmdに貼り付けました。列Aで名前を変更したいすべてのファイルのセルで、完全に機能しました。

于 2016-02-04T18:11:27.910 に答える