使用 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,我會得到帶有空格的完整路徑名。但如果我使用 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

來源命令列參數(參數)


使用“雙引號

如果單一參數包含空格,您仍然可以透過用「引號」括起來將其作為一項傳遞 - 這對於長檔名非常有效。

如果使用參數來提供以下檔案名稱:

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

此參數將是:

%0 = 我的批次

%1 = "C:\Program Files\我的資料檔.txt"

來源語法:轉義字元、分隔符號和引號


進一步閱讀

相關內容