2017-08-18 3 views
0

コーディングは私の専門ではありませんが、問題を見つけたので、Google検索でバッチファイルプロセスを使用して解決してください。基本的に私は、フォルダに移動する必要があり、彼らは以下のとおり非常に単純なファイル構造を持つファイルの何千ものカップルを持っている:バッチファイルを使用してファイル名に基づいてフォルダとサブフォルダを作成する

UK--London--Filename.pdf 
UK--London--Filename2.pdf 
UK--Manchester--Filename3.pdf 
UK--Liverpool--Filename4.pdf 
UK--Chester--Filename5.pdf 

私は、スクリプトを希望:

1. Pick up the first "--" check if the folder exists, if not create it 
2. Pick up the second "--" check if the folder exists, if not create it 
3. As there might be more than two "--", ignore the rest 
4. Move file into the subfolder 

へ私は再利用する試みstackoverfloで別の質問からスクリプトを持っていた

C:\FILETEST\UK\London\UK--London--Filename.pdf 
C:\FILETEST\UK\London\UK--London--Filename2.pdf 
C:\FILETEST\UK\Manchester\UK--Manchester--Filename3.pdf 
C:\FILETEST\UK\Liverpool\UK--Liverpool--Filename4.pdf 
C:\FILETEST\UK\Chester\UK--Chester--Filename5.pdf 

:そのためには、出力は(私は、スクリプトをテストするために使用していたフォルダがあるノート「ファイルテスト」)いくつかのようにする必要がありますw(Batch create folders based on part of file name and move files into that folder)。私はそれが私が必要とするものを正確に行えないと理解しますが、何も出力されないようです。

@ECHO OFF 
SETLOCAL 
SET "sourcedir=c:\FILETEST" 
PUSHD %sourcedir% 
FOR /f "tokens=1*delims=--" %%a IN (
'dir /b /a-d *.*.*' 
) DO ( 
ECHO MD %%a 
ECHO MOVE "%%a.%%b" --\%%a\ 
) 
POPD 
GOTO :EOF 

頭痛のお詫びには、これは簡単な解決策だと思っています。

は、現在のディレクトリ内のファイルのディレクトリリスト、( /a-d =なしdirectorynames)に一致 *--*--*を読んで、

パノス

+2

使用しているスクリプトでは、2つの 'ECHO'コマンドを削除して有効にする必要があると回答しています。 'ECHO MD %% a'と言うと' MD %% a'だけに変更されます。 'ECHO'の部分はコンソールへの印刷を意味します。それを削除すると、それをエコーするのではなく 'MD'コマンドが実行されます。あなたは何も出力されていないと言う、どのようにスクリプトを実行している?それをダブルクリックしますか?またはコマンドプロンプトから実行していますか?コマンドプロンプトから実行する必要があります。そうしないと、出力はただちに表示され、自動終了します。 – Matt

+0

私はファイルマスクも変更する必要があると思います: 'dir/b/a-d *。*。*'あなたのディレクトリでそのコマンドを実行して、ファイルのリストを返すようにしてください。マスクを '*。*'にぶら下げてください。これは単に 'filename.extension'です。 – Matt

+0

こんにちはマット、あなたのクイック返信ありがとう!Magooが問題を解決するのを助けました – Panos

答えて

1
@ECHO OFF 
SETLOCAL 
SET "sourcedir=c:\FILETEST" 
PUSHD %sourcedir% 
FOR /f "tokens=1,2*delims=-" %%a IN (
'dir /b /a-d *--*--*.*' 
) DO if "%%c" neq "" ( 
ECHO MD "%%a" 
ECHO MD "%%a\%%b" 
ECHO MOVE "%%a--%%b--%%c" ".\%%a\%%b\" 
) 
POPD 
GOTO :EOF 

、ありがとうございました。 %%aが最初の--シーケンスの前の部分を取得し、%%bの次の部分を取得し、残りの部分を%%cとするトークン。

%%cでない場合は、ディレクトリを作る「\ %%」と「\ %%の\ %% bの」引用された(名前にスペースは、そうでない場合は作成2」として見られるので、ディレクトリ ")、次に同じ理由で引用されたファイルを移動します。

各文字は個別にdelims=とclose-quoteの間にあることに注意してください。デリミタ文字列はサポートされていません。したがって、このコードは-と同様に---と他のシーケンスを取り上げて処理します。あなたは(の前にif "%%c" neq ""の直後にif exist "%%a--%%b--%%c"を追加して、作成/移動をさらにゲートすることができます。

mdは、ターゲット名が存在しない場合はディレクトリを作成し、すでに存在する場合はエラーメッセージを生成します。エラーメッセージを表示しないようにするには、md行に2>nulを追加します。

+0

こんにちはMagoo、あなたの迅速な返信をありがとう!私は5行目のデリミタを2つのハイフンに改め、あなたのスクリプトは本当にうまく動作します。 – Panos

+0

@Panos、デリミタを元に戻してください。 Magooは1つのハイフンを使用するだけで正しかった。 – Compo

+0

ちょうどあなたのコメントを読んでちょうど " - "と " - " ...を持っていますファイルでいくつかの問題を引き起こしますが、バッチファイルが " - "を探すことができない場合、その周りの方法を考えなければなりません。 もう一度、ありがとうございました! – Panos

関連する問題