0
私がチェックしないバッチスクリプトがあります。バッチファイルでループを終了するにはどのように
- は、日付と時刻の形式
- Oracleリスナーのチェック
- オラクルDBのステータスチェック
- ディスクスペースとログファイルを作成します:問題の
@echo off
set ORACLE_SID=equis01
REM set result_file = %Date:~4,2%.%Date:~7,2%.%Date:~10,4%
set HH=%TIME: =0%
set HH=%HH:~0,2%
set MI=%TIME:~3,2%
set SS=%TIME:~6,2%
REM for /F "tokens=2-4 delims=/ " %%i in ('date /t') do set result_file="%%j"."%%i"."%%k"_%HH%.%MI%.%SS%_"DBXXX".log
if exist %result_file% (
del %result_file%
)
>%result_file% (
echo Oracle Listener Status:
echo ========================================
echo.
lsnrctl status
echo.
echo.
echo.
echo Oracle Database Status:
echo ========================================
echo.
(
echo @monitoring.sql
) | sqlplus/
)
echo.
echo.
echo.
echo Disk Space:
echo ========================================
for /f "skip=1 usebackq delims==" %%i in (`wmic logicaldisk where "mediatype='12'" get caption`) do (
call :doit %%i >> "%result_file%"
)
goto :eof
:doit
set driveletter=%1
if {%driveletter%}=={} goto :EOF
for /f "usebackq delims== tokens=2" %%x in (`wmic logicaldisk where "DeviceID='%driveletter%'" get FreeSpace /format:value`) do set FreeSpace=%%x
for /f "usebackq delims== tokens=2" %%x in (`wmic logicaldisk where "DeviceID='%driveletter%'" get Size /format:value`) do set Size=%%x
set FreeMB=%FreeSpace:~0,-10%
set SizeMB=%Size:~0,-10%
set /a Percentage=100 * FreeMB/SizeMB
echo %driveletter% %FreeMB% GB out of %SizeMB% GB Total - %Percentage%%% free
rem echo exit
for %%a in (*.log*) do "C:\Program Files\7-Zip\7z.exe" a -tzip "%result_file%" "%%a"
説明をご確認ください コードを実行した後、ログファイルをアーカイブする必要があります。 しかし、メッセージは言う:
C: 25 GB out of 42 GB Total - 59% free System ERROR: The process cannot access the file because it is being used by another process. ERROR: 11.10.2016_17.47.31_DBXXX.log Can not open the file as archive D: 88 GB out of 107 GB Total - 82% free System ERROR: The process cannot access the file because it is being used by another process. ERROR: 11.10.2016_17.47.31_DBXXX.log Can not open the file as archive E: 415 GB out of 436 GB Total - 95% free System ERROR: The process cannot access the file because it is being used by another process. ERROR: 11.10.2016_17.47.31_DBXXX.log Can not open the file as archive
問題を解決する方法は?あなたはこのようなコードを簡素化することができWMIC
部分について
PowerShellには、実際の言語のループ構造がはるかに明確で使いやすいため、cmd.exeシェルスクリプト(バッチファイル)を使用するのではなく、スクリプトをPowerShellで作成することをお勧めします。 –
@Bill_Stewart私たちはプログラミングのヘルプフォーラムに参加しており、OPはバッチファイルの問題について助けを求めています。このように 'Python'を使うように彼に言わないと、彼のコードもLinuxでも動くでしょう。 'batch'の' loop'はPowershellのように非常に便利です。あなたはそれを使って学ぶだけです。 – SachaDee
@SachaDee - ちょうど良いツールを提案しています。 PythonはWindowsに組み込まれていないので、良い選択ではないかもしれません。 PowerShell(Windows 7以降)は、cmd.exeより優れており(特にスクリプティングでは!)、ほとんどすべての考えられる方法で使用できます。 PowerShellに慣れていない場合は、時間の投資に多大な報酬が与えられるので、覚えておいてください。 –