2017-04-19 9 views
1

これは特に困惑的な問題です。私は何をしなくても使えるとは思っていますが、通常は単純なバッチファイルしか書いていません。フォルダ名のプレフィックスとタイムスタンプを複数のフォルダに結合して、プレフィックスのある新しいフォルダに組み込みます。

私が働く病院で巨大な研究プロジェクトを持っている、と私は働いているデータはこの例に見られるように、タイムスタンプに続く4桁のサブジェクト識別子を私に提示されています

6443_20170419_141200416
6443_20170419_141200447
6443_20170419_141200500
6476_20170419_141200537
6476_20170419_141201112
など

私が点灯していますこれらのフォルダは何千もあり、それぞれが非常に長いファイル名の1〜3のファイルです - 唯一の共通点は.DCM拡張です。

私がしたいのは、フォルダ名の最初の4文字を抽出し、その4文字の名前で新しいディレクトリを作成し、一致する接頭辞を持つフォルダ内にあるファイルを新しく作成されたフォルダ

たとえば、6443で始まるフォルダに複数の.DCMファイルがあるとします。 6443という名前の新しいフォルダを作成して(誤って削除しないように現在のディレクトリとは別の場所に)、各ディレクトリのすべての.DCMファイルを新しいフォルダに移動します。

私は、このファイルを歩くためにFOR/Fを使用して、他のさまざまなスクリプトタスクに使用していた件名ID#をすべて含んでいる.TXTファイルを持っています。 。

これは一度は本当に私のノックインです。助けて!!!

-----追加情報----- 私は進歩してきましたが、それはまだ正しくありません。私は以下のようにスクリプトを使用していますが、4桁のプレフィックスで並べ替えるのではなく、各フォルダ内のすべてのファイルを新しく作成したフォルダのそれぞれに移動しています。ここで

@ECHO on 
cls 

FOR /f "delims=_" %%a IN ('dir /b /ad "*_*_*"') DO (
    if not exist %%a MD .\combined\%%a 
    FOR /d /r %%d IN ("*") DO (
    copy %%d\* .\combined\%%a\* 
    ) 
) 

答えて

0

修正スクリプトです:

@echo on 
cls 

for /F "tokens=1* delims=_" %%a in ('dir /B /A:D "????_*"') do (
    if not exist ".\combined\%%a\" md ".\combined\%%a" 
    copy ".\%%a_%%b\*.dcm" ".\combined\%%a" 
) 

私は何が変わった:

  • tokensオプションを再構築することができるようにするために、外側for /Fループに追加されました後で元のソースディレクトリ名。
  • ディレクトリ検索パターンが改善されました。
  • ifクエリで間違ったディレクトリがチェックされました。
  • 内側のforループが削除されました。これは、すべてのソースディレクトリを再度繰り返したためです。
  • copyコマンドの送信元と宛先のパスが変更されました。
  • すべてのパスは適切に引用されています。
+0

ありがとうございました - それについては分かりません:) もう1つ質問があります。%% bの意味とその動作について少し教えてください。結合したファイルを2文字の接頭辞でさらに分離し、それらをコピーするときに名前を変更するコードを追加していますが、正しく機能していません。 –

+0

['/F'](http://ss64.com/nt/for_f.html)を見てください - あなたは' %% a'、 '%% b'のような参照を見つけるでしょう。 '?'は1文字を表すワイルドカードです - ['dir'](http://ss64.com/nt/dir.html)を参照してください。もちろん、あなたの新しい問題に関する新しい質問をすることができます... – aschipfl

関連する問題