このコミュニティの多くの助けを借りて(最初の質問は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.xls
、abc_PROJECT2_def.xls
、など 私はその名前と日付に関するこれらのファイルをコピーする例私のバッチと希望:
EDIT 2など、abc_PROJECT1_def.xls
はC:\Statistics\PROJECT1\2016\05\
にコピーされます、abc_PROJECT2_def.xls
はC:\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"
)
)
この質問は、[CodeReview](http://codereview.stackexchange.com/)で適切です。 – aschipfl