BATが空間のある時間を手に入れるための解決策
最近、あるプロジェクトでファイルを定期的にバックアップする必要があり、BATファイルを使ってフォルダ名を秒単位で自動生成していました。
batスクリプトの時間は以下のように設定されています。
pushd E:\Test
set T=%date:~0,10%-%time:~0,2%%time:~3,2%%time:~6,2%
md %T%
popd
time変数の値が以下の場合、各操作の意味は以下の通りです。
time:~0,2% は、左右のポインタを0ビットずつ右に移動し、移動した位置から2文字を抜き出し、時間フィールドの値を生成することを意味します。
time:~3,2% は、ポインタが左から右に3ビットシフトされ、オフセットから2文字が抽出され、分フィールドの値となることを意味します。
time:~6,2%は、ポインタが左から右に6ビットシフトされ、オフセットから2文字が抽出され、秒フィールドになることを意味します。
time:~0,2%%time:~3,2%%time:~6,2% を使うと問題があります。つまり、TIME が 08:00 ならコンピュータは 08 と表示しますが、実は %time:~0,2% で取り込むと、スペース +8 を取り込むので、md でフォルダを作るときに T にスペースが入っているので 2 つのフォルダができてしまうという問題があるのです。
例えば、今の時刻は、2019-08-23, 08:30:30です。
T = 20190823- 83030
md %T%は、20190823-と83030のように2つのフォルダを作成します。
回避策
時間を別のhとして定義し、hの中のスペースをゼロに置き換えてから、T:にhを追加してください。
set h=% =0% -> ここで '=' は '置換' を意味します。
pushd E:\Test
set h=%time~0,2%
set h=% =0%
set T=%date:~0,10%-%h%%time:~3,2%%time:~6,2%
md %T%
popd
BAT時間空間問題の解決策についての記事は以上です。BAT時間空間問題の詳細については、スクリプトハウスの過去記事を検索するか、以下の記事を引き続き閲覧してください。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Windowsのbatスクリプトコマンドを使用してワンクリックでMySQLサービスを開始する方法
-
バッチ処理における文字列分割コード
-
一括リネーム方式
-
Windowsのcmdコマンドラインの入出力リダイレクト問題
-
Windows Server 2008 R2のリモートポート3389を変更するためのバッチコード
-
ウェブページを開いたり閉じたりするためのcmdバッチコード
-
set /p=コマンドを詳しく説明します。
-
DOSバッチ処理による時限式シャットダウン操作の方法詳細
-
N日前または指定日時(前後)に作成(または変更)されたファイルをバッチ処理で削除する。
-
script_tool_for_windows.bat Windows 環境のホストのためのワンクリック配備スクリプト