Windows バッチを使用してコピーしたファイルに日付と時刻のスタンプを追加する

Windows バッチを使用してコピーしたファイルに日付と時刻のスタンプを追加する

これは簡単だと思っていましたが、思ったよりも難しいようです。

タイムスタンプを追加してファイルをコピーして貼り付けたいのですが、次のコードを使用してタイムスタンプを取得します。

set hournum=%time:~0,2%

if %hournum% gtr 9 (set timeback=_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%h%time:~3,2%m%time:~6,2%s) else (set timeback=_%date:~10,4%%date:~4,2%%date:~7,2%_0%time:~1,1%h%time:~3,2%m%time:~6,2%s)

Set FileAffected=%1
echo %FileAffected:~0,-1%%timeback%

FILE.TXTこれにより、ファイルはFILE.TXT_2015-03-05_11h56m32s

しかし、私は明らかにそうありたいと願っていますFILE_20150305_11h56m32s.TXT

ファイル拡張子は任意の拡張子または任意の長さにすることができます。ご協力ありがとうございます。

編集: FileAffected は引用符付きで渡されるので、引用符を ~0,-1 で削除しました。

次のようにすると、次のことがわかりました。

FOR /f %%i IN (%FileAffected%) DO (
ECHO filename=%%~fi
ECHO fileextension=%%~xi
)

FileAffected を echo すると、スペースを含む完全なパス名が返されます。しかし、FOR /F コマンドを使用すると、スペースの後の部分が切り捨てられたファイル名が返されます。"IN" コマンドの "%FileAffected" 変数に引用符を追加しても、問題は解決しません。fi や xi の周囲に引用符を追加しても、問題は解決しません。

答え1

ファイル名の末尾に日付と時刻を追加するにはどうすればよいですか?

次のバッチファイルを使用します。

@echo off
set hournum=%time:~0,2%
if %hournum% gtr 9 (set timeback=_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%h%time:~3,2%m%time:~6,2%s) else (set timeback=_%date:~10,4%%date:~4,2%%date:~7,2%_0%time:~1,1%h%time:~3,2%m%time:~6,2%s)
echo %~n1%timeback%%~x1

出力:

F:\test>test file.txt
file_3/01_18h07m40s.txt

例えばファイル名にスペースが含まれている場合はfile with space.txt電話"次のように、ファイル名の前後に sが付いたバッチ ファイル:

F:\test>test "file with space.txt"
file with space_3/01_18h07m56s.txt

パラメータ拡張

%~n1%1 を、ファイル拡張子のないファイル名 (C:\utils\MyFile) に展開します。または、パスのみが存在する場合 (末尾のバックスラッシュなし)、そのパスの最後のフォルダーに展開します。

%~x1%1 をファイル拡張子のみに展開 - .txt

ソースコマンドライン引数(パラメータ)


「二重引用符の使用

1 つのパラメータにスペースが含まれている場合でも、「引用符」で囲むことで 1 つの項目として渡すことができます。これは長いファイル名の場合に適しています。

次のようにパラメータを使用してファイル名を指定する場合:

MyBatch.cmd "C:\Program Files\My Data File.txt"

パラメータは次のようになります。

%0 = マイバッチ

%1 = "C:\Program Files\My Data File.txt"

ソース構文: エスケープ文字、区切り文字、引用符


参考文献

関連情報