0

次のシナリオでは、一括で名前を変更する必要があります。

  1. フォルダAにたくさんのファイルがあります
  2. フォルダ B 内のファイルの束。
  3. フォルダ A 内のファイルはすべて「.doc」であり、
  4. フォルダ B のファイルはすべて「.jpg」です。
  5. フォルダ A のファイル名は「A0001.doc」
  6. フォルダ B のファイル名は「A0001johnsmith.jpg」です。

フォルダーをマージし、フォルダー A のファイルの名前を変更して、フォルダー B の一致するファイルの名前部分を追加したいと考えています。

例:

前:

FOLDER A:     Folder B:
A0001.doc     A0001johnsmith.jpg

後:

Folder C:
A0001johnsmith.doc 
A0001johnsmith.jpg

バッチの名前変更スクリプトをいくつか見てきましたが、唯一の違いは、フォルダー A の対応するファイルの末尾に追加できるように、名前部分を含む変数を割り当てる必要があることです。

それを行う最善の方法は、再帰ループを実行する単純な python スクリプトを実行し、フォルダー内の各アイテムを次のように処理することだと思います。

  1. A0001.doc のファイル名を解析する
  2. 文字列をフォルダ B のファイル名に一致させる
  3. 一致した文字列に続き、"." の前の部分を取ります。そして変数を割り当てます
  4. 元の文字列 A0001 を取得し、名前要素を含む変数を追加して名前を変更します
  5. 両方のファイルをフォルダー C にコピーします (非破壊、エラーの場合など)。

これにはpythonを使用することを考えていましたが、構文などで助けを借りることができました。私は基本の python ライブラリの使用方法を少ししか知りません。おそらく「OS」や「SYS」などのライブラリをインポートすることになると思います。私は以前にそれらを使用したことがありません。また、Windows バッチ スクリプトや PowerShell を使用することにもオープンです。どんな入力も役に立ちます。

4

2 に答える 2

1

あなたがそれを使うと言ったので、これはPowershellです。

私はこれをテストしていないことに注意してください。現在、Windows マシンにアクセスできないため、テストできません。記憶に頼っていますが、概ね正しいと思います。

foreach($aFile in ls "/path/to/FolderA")
{
    $matchString = $aFile.Name.Split("."}[0]
    $bFile = $(ls "/path/to/FolderB" |? { $_.Name -Match $matchString })[0]
    $addString = $bFile.Name.Split(".")[0].Replace($matchString, "")
    cp $aFile ("/path/to/FolderC/" + $matchString + $addString + ".doc")
    cp $bFile "/path/to/FolderC"
}

これにより、名前の構造について多くの仮定が行われます。たとえば、追加する文字列が一般的なファイル名文字列に表示されないと仮定しました。

于 2012-06-01T00:03:57.850 に答える
1

単純なバッチ スクリプトを使用すると非常に簡単です。

@echo off
for %%A in ("folderA\*.doc") do (
  for %%B in ("folderB\%%~nA*.jpg") do (
    copy "%%A" "folderC\%%~nB.doc"
    copy "%%B" "folderC"
  )
)

エラーチェックを追加していません。

「A1file1.jpg」や「A10file2.jpg」などの複数のファイルに一致する「A1.doc」のようなファイルがあると、問題が発生する可能性があります。

.doc ファイルの名前が固定幅で、すべての .doc に .jpg が存在する限り、コードは機能するはずです。

もちろん、さまざまなシナリオやエラー条件を処理するために、さらに多くのコードを追加できます。

于 2012-06-01T01:22:00.487 に答える