私はこのコミュニティの多くの助けを借りてバッチを作成しましたが(バッチ内のIfステートメントとアプリが認識されなくなった場合の最初の質問です)、このバッチに追加するプロジェクトが増え、読めなくなります。
私が持っているもの:統計Excelファイルを\ 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
まず、ネットワークドライブをマッピングします。次に、このフォルダーで、PROJECTXおよびその他のデータで名前が付けられた各ファイルをチェックします。ファイルの名前にPROJECTXが見つかった場合は、varフォルダーとdatenameを作成して、ファイルを正しいフォルダーに配置します。年または月の統計サブフォルダーが存在しない場合、バッチがそれらを作成します。最後に、ファイルがすでに存在する場合は上書きして、統計のサブフォルダーにファイルをコピーしています。これはまさに私が必要としているものです。
私の質問は:実際には5つのプロジェクトがあり、数日で約10または15になるので、この構造ではこのプログラムは最適化されていません。サーバーで読みやすく実行しやすくするために何を変更できますか?
編集:
以下のような(\ファイル\ Excelファイル(1つの統計に1つのファイル)と、各プロジェクトの名前が含まれている名前のファイルに含まれている:私は、フォルダCを持ってabc_PROJECT1_def.xls
、abc_PROJECT2_def.xls
私のバッチは、その名前に関するこれらのファイルをコピーして、など私が希望します例:abc_PROJECT1_def.xls
にコピーされC:\Statistics\PROJECT1\2016\05\
、abc_PROJECT2_def.xls
にコピーされますC:\Statistics\PROJECT2\2016\05
。
編集2:
これが私の新しいコードです:
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"
)
)
なぜすべての顧客に同じコードを何度も書くのですか?それを一般的にする:
@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"
)
)
同じことをする必要があります。
それはあなたを示すmkdir
とcopy
代わりにそれらを実行した画面上でコマンドを。出力が満足のいくものであれば、2つを削除してくださいECHO
。
注:%PATH%
はシステム変数です。Windowsはそれを使用して、独自のプログラムを検索します。正確にわからない場合は、何をしているのかを変更しないでください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加