2012-08-28 37 views
0

我正在製作一個程序,可以自動備份文件,最多可以存儲五個文件,並且可以選擇還原五個文件中的任何一個文件。備份文件時,它會以YYYYMMDD_HHMMSS_filename.ext格式添加日期和時間戳。爲了恢復文件,有必要先剪出日期戳。 我目前使用的將日期戳從文件起始處剪下的方法如下。從批處理空格的字符串中刪除日期和時間戳

set VAR=%VAR:~16% 
echo %VAR% 

的問題是,如果備份文件被稱爲「20120825_140343_file name.txt」,上述方法將只返回「文件,」省略空間後什麼。文件名中的空格需要保留,以供程序使用它們識別。

tl; dr我需要將字符串20120825_140343_file name.txt剪切爲「文件名.txt」,但我的方法只是返回「文件」。

如果分隔符或其他東西可以幫助我將日期戳和文件名用不同的字符分開,I.E. 20120825_140343-file-name.txt

回答

3

你的方法雖然不雅且不靈活,但應該可行。這告訴我你沒有在VAR中存儲整個文件名。這就是爲什麼%var:~16%只導致file,而不是file name.txt。我假設你分配VAR像這樣的地方:

SET VAR=%1 

你需要做這一點:

SET VAR=%1 %2 

或插入周圍的文件名雙引號,當你打電話給你的批處理文件,然後設置var這樣刪除引號:

SET VAR=%~1 

這應該足以讓你的批處理工作。

============================================== ======

但是,要回答您實際詢問的問題,我會告訴您一種從var中提取「文件名.txt」的方法,即使存在更多或甚至少於16個前綴字符。

使用for /f語句,指定第3個標記,下劃線作爲分隔符。這是一個獨立的例子。 (要在命令行中運行,改變%%x%x

SET VAR=20120825_140343_file name.txt 
for /f "tokens=3 delims=_" %%x in ("%VAR%") do set VAR=%%x 
ECHO %VAR% 

只要記住,這個解決方案將解決您的問題,如果你不解決你的代碼,以確保您的VAR變量在整個文件名它

0

你試過嗎?

set VAR="%VAR:~16%"