2016-05-03 14 views
0

このコミュニティの多くの助けを借りて(最初の質問はIf statement in batch and app not recognized anymore)、バッチを作成しましたが、このバッチに追加するプロジェクトが増え、読めなくなりました。バッチスクリプトを最適化する

統計情報ツールを統計ファイルとして\ 10.0.0.1 \ MyFolderに送信する統計ツール これらのファイルを別のネットワークにコピーし、これらのファイルを現在の日付に関するサブフォルダに入れる必要があります。 (それが現在取り組んでいる)私が書いたもの

@echo off 
setlocal enabledelayedexpansion 
net use Z: \\10.0.0.1\MyFolder 
set path=Z:\ 
set year=%date:~10,4% 
set month=%date:~4,2% 
set day=%date:~7,2% 
echo %date% 
for /f "delims=" %%a in ('dir *.xlsx /b /a-d "%path%" ') do (
    set "name=%%~na" 
    if "!name!"=="!name:PROJECT1=!" (
     if "!name!"=="!name:PROJECT2=!" (
      if "!name!"=="!name:PROJECT3=!" (
       if "!name!"=="!name:PROJECT4=!" (
        if "!name!"=="!name:PROJECT5=!" (
         set folder=Empty 
        ) else (
         set folder=Project5 
         datename=%year%%month%%day% 
        ) 
       ) else (
        set folder=Project4 
        if "!name!"=="!name:jour=!" (
         set datename=%year%%month%%day% 
        ) else (
         set datename=%year%%month% 
        ) 
       ) 
      ) else (
       set folder=Project3 
       if "!name!"=="!name:jour=!" (
        set datename=%year%%month%%day% 
       ) else (
        set datename=%year%%month% 
       ) 
      ) 
     ) else (
      set folder=Project2 
      if "!name!"=="!name:jour=!" (
       set datename=%year%%month%%day% 
      ) else (
       set datename=%year%%month% 
      ) 
     ) 
    ) else (
     set folder=Project1 
     set datename=%year%%month%%day% 
    ) 
    echo !datename! 
    IF not exist "\\10.0.0.2\Stats\!folder!\%year%" (mkdir "\\10.0.0.2\Stats\!folder!\%year%") 
    IF not exist "\\10.0.0.2\Stats\!folder!\%year%\%month%" (mkdir "\\10.0.0.2\Stats\!folder!\%year%\%month%") 
    copy "%path%%%a" "\\10.0.0.2\Stats\!folder!\%year%\%month%\!datename!_!name!%%~xa" 
) 
%SystemRoot%\System32\net.exe use Z: /delete 

まず、私は、ネットワークドライブをマッピングしています。 次に、このフォルダにPROJECT Xと他のデータで名前が付けられた各ファイルをチェックします。私がファイルの名前にPROJECT Xを見つけたら、ファイルを正しいフォルダに入れるためにvarフォルダとdatenameを作成します。 年または月の統計サブフォルダが存在しない場合は、バッチによって作成されます。 最後に、既存のファイルを上書きして統計ファイルのサブフォルダにコピーします。これは私が必要とするものです。

私の質問は:実際に私は5つのプロジェクトを持っており、数日で私は約10または15を持っているので、この構造ではこのプログラムは最適化されていません。サーバーをより読みやすく、実行しやすくするために変更することはできますか?

EDIT:

私はフォルダCがあります(名前のファイルに含まれているExcelファイルが含まれています\ファイル\(1つの統計に1つのファイル)と、各プロジェクトの名前を同様abc_PROJECT1_def.xlsabc_PROJECT2_def.xls、など 私はその名前と日付に関するこれらのファイルをコピーする例私のバッチと希望:

EDIT 2など、abc_PROJECT1_def.xlsC:\Statistics\PROJECT1\2016\05\にコピーされます、abc_PROJECT2_def.xlsC:\Statistics\PROJECT2\2016\05にコピーされます:。 (あなたの助けをとても感謝)

イッツ
for %%a in (%mypath%*.xlsx) do ( 
    for /f "tokens=2 delims=#" %%b in ("%%a") do ( 
     echo ----%%b----- 
     ECHO mkdir "\10.0.0.2\Stats\%%b\%year%\%month%" 
     ECHO copy "%%a" "\10.0.0.2\Stats\%%b\%year%\%month%\%year%%month%%day%_%%~nxa" 
    ) 
) 

が正常に動作しているようだが、私は唯一の最後の質問を持っている:ここで は、私の新しいコードでコピーしたファイルの最終的な名前は、元の内容に依存しますファイル名。たとえば、元のファイル名は、単語jourが含まれている場合、私は名前を変更する必要があり、それは、%year%%month%で始まるではなく、新しいファイル名が%year%%month%%day%で始まる必要がある場合、私はdatename変数を使用した理由、それはです。何度も何度もすべての顧客のために同じコードを書くのはなぜ

for %%a in (%mypath%*.xlsx) do ( 
    for /f "tokens=2 delims=#" %%b in ("%%a") do ( 
     if "%%~nxa"=="%%~nxa:jour" (
      set datename=%year%%month%%day% 
     ) else (
      set datename=%year%%month% 
     ) 
     echo ----%%b----- 
     ECHO mkdir "\10.0.0.2\Stats\%%b\%year%\%month%" 
     ECHO copy "%%a" "\10.0.0.2\Stats\%%b\%year%\%month%\!datename!_%%~nxa" 
    ) 
) 
+2

この質問は、[CodeReview](http://codereview.stackexchange.com/)で適切です。 – aschipfl

答えて

2

: それはのような何かをするために正しいですか?一般的にする:

@echo off 
setlocal enabledelayedexpansion 
net use Z: \\10.0.0.1\MyFolder 
set path=Z:\ 
set year=%date:~10,4% 
set month=%date:~4,2% 
set day=%date:~7,2% 
echo %date% 

for %%a in (%mypath%*.xls) do (
    for /f "tokens=2 delims=-" %%b in ("%%a") do (
    echo ----%%b----- 
    set datename=%year%%month% 
    echo "%%~nxa"|find /i "jour" >nul && set datename=!datename!%day% 

    ECHO mkdir "\\10.0.0.2\Stats\%%b%\year%\%month%" 
    ECHO copy "%%a" "\\10.0.0.2\Stats\%%b\%year%\%month%\!datename!_%%~nxa" 
) 
) 

同じことを行う必要があります。

これは、実行する代わりにmkdircopyコマンドを画面に表示します。出力があなたを満足させるならば、2つのECHOを取り除いてください。

注:%PATH%はシステム変数です。 Windowsは独自のプログラムを見つけるためにそれを使います。あなたがしていることを正確に知らなければ、それを変更しないでください。

+0

ありがとうございました。私はあなたのような 'mypath'で' set path'を変更しました。しかし、Statsフォルダにサブフォルダを作成するための変数 'folder'を見てください。だから、ファイル名にプロジェクト名が含まれている場合、私は各プロジェクトをテストします。 –

+0

プロジェクトに属していない '.xlsx'ファイルがある場合、あなたは組織上の問題を抱えていると思います。それは本当に問題ですか? – Stephan

+0

すべての統計ファイル(すべてのプロジェクト用)を統計サーバから10.0.0.1に送信し、各ファイルを各プロジェクトの各サブフォルダにExcelファイルの名前に応じて10.0.0.2にディスパッチします。 –