1

現在、デスクトップのバッチ ファイル Backup.bat に次のコードがあります。毎日 Excel スプレッドシート ファイルをバックアップし、現在の日付と時刻を追加して名前を変更するために使用されます。File.xlsxをコピーして、 File Sun-06-24-2012 23.21.46PM.xlsxとして新しいフォルダーに貼り付けます。

現在、日付と時刻は Sun-06-24-2012 23 .21.46PM.xlsx として追加されていますが、12 時間時計ではなくSun-06-24-2012 11 .21.46PM.xlsxとして追加したいと考えています。24 時間形式。

以下は、私が現在 Windows XP Professional で使用しているコードです。現在以下のコードにあるように、24時間形式ではなく12時間形式で時刻を追加する方法を知っている人はいますか。

@For /F "tokens=1,2,3,4 delims=/ " %%A in ('Date /t') do @(
Set DayW=%%A
Set Day=%%B
Set Month=%%C
Set Year=%%D
Set All=%%A-%%B-%%C-%%D
)
@For /F "tokens=1,2,3 delims=:,. " %%A in ('echo %time%') do @(
Set Hour=%%A
Set Min=%%B
Set Sec=%%C
Set Allm=%%A.%%B.%%C
)
@For /F "tokens=3 delims=: " %%A in ('time /t ') do @(
Set AMPM=%%A
)

copy "C:\Temp\File.xlsx" "C:\Temp\DailyBackup\File %All% %Allm%%AMPM%.xlsx"
4

2 に答える 2

2

Joey のコメントに同意します。24 時間形式の方がよいと思います。

また、日付と時刻を取得する方法は、コードが別の日付および/または時刻構成を使用する別のマシンに転送されるとすぐに壊れます。

しかし、とにかくここに行きます...

単一の %TIME% 展開から時間文字列全体を取得する必要があります。そうしないと、午前 0 時より前に時:分:秒を取得し、午前 0 時以降に AMPM を取得するリスクがあります。

一番上に置くと、コード全体@ECHO OFFに振りかける必要はありません。@

@echo off
For /F "tokens=1,2,3,4 delims=/ " %%A in ('Date /t') do (
  Set DayW=%%A
  Set Day=%%B
  Set Month=%%C
  Set Year=%%D
  Set All=%%A-%%B-%%C-%%D
)
For /F "tokens=1,2,3 delims=:,. " %%A in ('echo %time%') do (
  set /a "Hour=100%%A%%100"
  set Min=%%B
  set Sec=%%C
)
if %Hour% geq 12 (
  set AMPM=PM
  set /a "Hour-=12"
) else set "AMPM=AM"
if %Hour% equ 0 set "Hour=12"
if %Hour% lss 10 set "Hour=0%Hour%"
set "Allm=%Hour%.%Min%.%Sec%%AMPM%"

echo on
copy "C:\Temp\File.xlsx" "C:\Temp\DailyBackup\File %All% %Allm%.xlsx"
于 2012-06-26T16:02:16.630 に答える
1

Time /tは 24 時間形式で時刻を表示していますが、これはおそらく、それがコンピューターのロケールのデフォルトであるためです。

time /t書式設定オプションがないように見えるため、おそらく最も簡単な方法は、バッチ ファイルにセクションを追加して、24 時間制を 12 時間制に変換することです。

Set Hour=%%Aあなたの下のどこかで、次のことを行う必要があります。

  • 12 を超える場合は、時間から 12 を引きます
  • 「00」を「12」に変更

例えば:

If %Hour% gtr 12 (
Set /a Hour=%Hour%-12
)
If %Hour% == 00 (
Set Hour=12
)

/a スイッチをオンにするSetと、等号の右側の値が評価される数値式であることがわかります。

これにより、時刻が 1 から 9 までの場合、時間の先頭に 0 がなくなります。if先頭に 0 を追加する別のステートメントを使用してこれを回避できます。または、よりエレガントなアプローチがあるかもしれません。

于 2012-06-26T15:22:20.220 に答える