「このプロジェクトは自動保存機能を実装するバッチファイルとPythonスクリプトを紹介します。」
一応、全ファイルを参考として載せておきます。
ディレクトリー構成
・C:\ + 一応、どこにおいても動作しますが、ドキュメントは避けた方が良いです。理由。ディスプレーは固有のPC環境にある。
+Auto_Save+暫定的命名 プロパティの書き込み禁止を最終的に解除しておく
+ +auto_save.png アイコン制作時の元イメージ1
+ +lockfile_m.lock ロック用masterファイル
+ +lockfile.lock ロックファイル メイン用
+ +lockfile1.lock ロックファイル1 タイマー用
+ +python_get_time.py 後で説明
+ +save_ranning.ico アイコンsaving.bat用
+ +saving.bat 後で説明
+ + [saving.bat - ショートカット] saving.bat -s スタートswitch付
+ +saving (seving.bat icon付ディスクトップ配置用)
+ +Stop_go_Work.ico アイコン 切り替え表示で動作状態を出している
+ +Stop_S_work.png アイコン制作時の元イメージ2
+ + [saving.bat - ショートカット] saving.bat -n ノンストップswitch予定だったが無い。
+ +timed_saving_p.bat 後で説明 これが題名のfile
+ +timed_saving.bat 仕上げる前のバッチ
+
+ +me_Looking_to.txt 一応、後助のために置いておく
me_Looking_to.txt
saving(.lnk)オンリー。icon「save_ranning.ico Working」icon「Stop_go_Work.ico Stop」ディスプレオンリーicon
work C:\Auto_Save\saving.bat only lock no moniter
C:\Auto_Save\saving.bat -n only unlock moniter
..ユーザー/名前/(AppData)/Roaming/Microsoft/Windows/スタートメニュー/プログラム/スタートアップ/[saving.bat - ショートカット(-s)]アイコンをdrop
lockfile.lockとlockfile_m.lockは空のtextファイルを変名して必ず作ってやる。なお、かってながらname_mの_mはマスターの印。
アイコンにしたいbatを選択して「右クリック・「ショートカットの作成」」で作ってから
「以下のバッチファイルはタイマーの設定を行い、指定の間隔でPythonスクリプトを実行します。」
timed_saving_p.bat [ANSI(Shift-JIS)]save
@echo off
setlocal
REM ロックファイルの作成
set lockfile1="%~dp0lockfile1.lock"
if not exist %lockfile1% (
copy "%~dp0lockfile.lock" "%~dp0lockfile1.lock"
) else (
exit /b 0
)
REM セッティング間隔(秒単位)
set /a my_kankaku=30
REM 変数の初期化
set /a add_1=0
set /a add_2=0
set /a my_1=0
set /a my_2=0
set /a current_seconds0=0
set /a total_seconds1=0
REM 間隔を時、分、秒に分解
set /a my_h=my_kankaku/3600
set /a my_m_k=my_kankaku-(my_h*3600)
set /a my_m=my_m_k/60
set /a my_s=my_m_k-(my_m*60)
REM 現在の時間を秒単位で取得
:now_time_get
REM 現在の時間を再度取得
set time1=%time: =0%
rem 「time」から切り出した数字をそれぞれ変数に代入
set hh=%time1:~0,2%
set mm=%time1:~3,2%
set ss=%time1:~6,2%
set ima_time=%hh%:%mm%:%ss%
echo 現在時刻: %ima_time%
set /a hojyo1=0
set /a hojyo2=0
if %hh% geq 23-my_h if %mm% geq %my_m% if %ss% geq %my_s% (
set /a hojyo1=1
)
if %hh% leq %my_h% if %mm% leq %my_m% if %ss% leq %my_s% (
set /a hojyo2=24
)
REM
set /a total_seconds1=(hh*3600)+(mm*60)+ss+(hojyo1*3600*24)
set /a total_seconds2=%total_seconds1%+%my_kankaku%+(%hojyo2%*3600*24)
REM 計算結果を表示
echo 現在の時間(秒単位): %total_seconds1%
echo %my_kankaku%秒後の時間(秒単位): %total_seconds2%
REM pause
REM 引数をチェック
set /a one_end=0
goto one_now
:one_now
if "%1" == "-s" (
set /a one_end=1
goto work_one
) else (
goto check_time
)
goto end_reqest
:check_time
REM Pythonスクリプトを実行
for /f "tokens=*" %%i in ('python python_get_time.py') do set current_time=%%i
REM タイムスタンプを表示
REM 現在の時間を再度取得
set time2=%time: =0%
rem 「time」から切り出した数字をそれぞれ変数に代入
set ha=%time2:~0,2%
set ma=%time2:~3,2%
set sa=%time2:~6,2%
set millisecond_x4=%time2:~9,3%
set time3=%ha%:%ma%:%sa%
REM 奇数か偶数かの判定
set /a kisuu=sa%%2
if %kisuu% equ 0 (
REM 偶数の場合の処理
set /a add_2=0
if %add_2% equ 0 (
if %add_1% equ 0 (
set /a add_1=1
goto all_0
)
)
) else (
REM 奇数の場合の処理
set /a add_1=0
if %add_1% equ 0 (
if %add_2% equ 0 (
set /a add_2=1
goto all_0
)
)
)
goto check_time
:all_0
set /a my_1=my_1+1
if %sa% equ 2 (
echo min=02sec
set /a my_1=2
)
if %my_1% equ 10 (
echo Plese enykye it 09Sec
pause
)else (
echo The second is not 09
)
if %sa% neq %current_seconds0% (
set a/ current_seconds0=%current_seconds%
) else (
goto check_time
)
set /a current_seconds=(ha*3600)+(ma*60)+sa
REM 足されているime2から0:00:00に一日分引いてしまう。引いた残りの数が必要な数。
if %ha% equ 0 if %my_m% equ 0 if %sa% geq 0 (
if 86400 geq %total_seconds2% (
set /a total_seconds2=%total_seconds2%-86400
)
)
echo 現在のタイムスタンプ: %current_time%
REM タイムスタンプを解析して変数に格納
set hour=%current_time:~0,2%
set minute=%current_time:~3,2%
set second=%current_time:~6,2%
set millisecond=%current_time:~9,3%
REM 解析結果を表示
echo pyton_時間: %hour% 分: %minute% 秒: %second% ミリ秒: %millisecond%
echo t0 %time3% t0 %current_seconds% t2 %total_seconds2% plese mille_x4 %millisecond_x4% my_1=%my_1%
REM test
if not exist "%~dp0lockfile.lock" (
set one_end=1
goto work_one
)
REM 1秒
set /a my_t_hojyo=current_seconds+my_kankaku
set /a my_t_hojyo1=%my_t_hojyo%
if %total_seconds2% leq %current_seconds% (
set /a total_seconds2=%my_t_hojyo%
set /a total_seconds3=%my_t_hojyo1% + %my_kankaku%
echo it work halo world! %time3% %current_seconds% OK %total_seconds2% nex %total_seconds3%
goto work_one
)
goto check_time
:work_one
REM 時間が来たら
echo 処理をします。
powershell [console]::beep(1000,300)
if %one_end% equ 1 (
goto end_reqest
REM pause
)
goto check_time
:end_reqest
del "%~dp0lockfile1.lock"
endlocal
python_get_time.py [UTF-8] save 別途 python が必要 REM可
import time
# 現在の時刻を取得(ミリ秒単位)
current_time = time.time()
formatted_time = time.strftime("%H:%M:%S", time.localtime(current_time))
milliseconds = int((current_time - int(current_time)) * 1000)
# デバッグ用の出力
print(f"現在時刻: {formatted_time}.{milliseconds:03d}")
saving.bat [ANSI(Shift-JIS)]save
@echo off
setlocal
REM 処理受付
del "%~dp0lockfile1.lock"
REM アドレスセット「Pcによってuserの部分が変わる場合がある"C:\Users\tatty\OneDrive\デスクトップ\saving.lnk"
REM ユーザー名の取得とデスクトップパスの設定
set desktop_path=%USERPROFILE%\OneDrive\デスクトップ
REM デスクトップ上にファイルを作成する例
echo This is bat これは Auto Save のバッチです。 "%desktop_path%\saving.lnk"
echo 実行させておきたい時は「最小化」して、見えなくして、実行させておいてください。閉じると停止のまま止まります。
if not exist "%desktop_path%\saving.lnk" (
echo "%desktop_path%\saving.lnk"
echo あなたは、アイコンを消しましたよね。。。
pause
echo 作りますよ。。。
pause
copy "%~dp0saving.lnk" "%desktop_path%\saving.lnk"
pause
)
set my_name_is="%desktop_path%\saving.lnk"
REM 引数をチェック
if "%1" == "-s" (
REM -sが指定された場合 echo -sオプションが指定されました。
if not exist "%~dp0lockfile.lock" (
REM ロックファイルの作成
del "%~dp0lockfile.lock"
REM 無いところから始めてやる。
)
)
REM 引数をチェック
if "%1" == "-n" (
REM -nが指定された場合の処理
echo -nオプションが指定されました。
if not exist "%~dp0lockfile.lock" (
REM ロックファイルのコピー
copy "%~dp0lockfile_m.lock" "%~dp0lockfile.lock"
REM ショートカットのアイコンを変更
powershell "$s=(New-Object -COM WScript.Shell).CreateShortcut('%my_name_is%'); $s.IconLocation='%~dp0Stop_go_Work.ico'; $s.Save()"
call timed_saving.bat
echo 動作中-n。
pause
) else (
del "%~dp0lockfile.lock"
powershell "$s=(New-Object -COM WScript.Shell).CreateShortcut('%my_name_is%'); $s.IconLocation='%~dp0save_ranning.ico';$s.Save()"
call timed_saving.bat -s
echo 待機中-n。
pause
)
) else (
REM 通常の処理
echo 通常の処理を実行します。
REM ショートカットのアイコンを変更
if not exist "%~dp0lockfile.lock" (
REM ロックファイルのコピー
copy "%~dp0lockfile_m.lock" "%~dp0lockfile.lock"
REM ショートカットのアイコンを変更
powershell "$s=(New-Object -COM WScript.Shell).CreateShortcut('%my_name_is%'); $s.IconLocation='%~dp0Stop_go_Work.ico'; $s.Save()"
echo 動作中。
call timed_saving_p.bat
) else (
del "%~dp0lockfile.lock"
powershell "$s=(New-Object -COM WScript.Shell).CreateShortcut('%my_name_is%'); $s.IconLocation='%~dp0save_ranning.ico'; $s.Save()"
echo 待機中。
call timed_saving_p.bat -s
)
)
REM その他のバッチ処理
endlocal
概略 まず、肝心なところ。
タイマー編
ロックファイルを消せばプログラム的に終われるようにして、二回目の進入を禁止している。
REM セッティング間隔(秒単位)
set /a my_kankaku=30
動いていて30秒で必ず終わりがあるか設定してある。
初期化と30秒を計算に使える様にしている。
初期時間
loop
python の実行
現在の時間を再度取得
1Sec目の最初の1回だけを通す。
予備の同期
REM 足されているime2から0:00:00に一日分引いてしまう。引いた残りの数が必要な数。
現在のタイムスタンプpython
現在のタイムスタンプbat
ロックファイルが無ければbreakする(0)
30Sec経っているか?
処理
loopへ
ロック1を消して、再実行できるように。
終わり。
Python
フォーマットに従い時間を取得しているだけmSec用
アイコンの表示状態を見てコントロールを変える
リセット
ロックファイル(0)コピー
-s スイッチの処理後共通のオプション無しをやる。
-n オプションの処理
REM ショートカットのアイコンを変更
タイマー編のコール
停止中アイコンに変える
終わり
謝辞 Copilot AI のアドバイスのもと進めさせて頂きました。
「ありがとうございました。」
copyright たっちゃん