从批处理中包含空格的字符串中删除日期和时间戳

时间:2012-08-28 15:05:18

标签: batch-file

我正在制作一个自动备份文件的程序,最多可存储五个文件,并且可以选择恢复五个文件中的任何一个。备份文件时,它会以YYYYMMDD_HHMMSS_filename.ext格式添加日期和时间戳。要恢复文件,首先需要剪切日期戳。 我目前用来从文件开头剪切日期戳的方法如下。

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

问题是,如果备份文件名为“20120825_140343_file name.txt”,则上述方法只返回“文件”,省略空格后的任何内容。需要保留文件名中的空格,以便程序使用它们识别它们。

tl; dr我需要将字符串20120825_140343_file name.txt剪切成“file name.txt”,但我的方法只返回“file”。

如果分隔符或其他东西有帮助,我可以用不同的字符分隔日期戳和文件名,I.E。 20120825_140343-文件name.txt

2 个答案:

答案 0 :(得分:3)

你的方法虽然不优雅且不灵活,但应该有效。这告诉我您没有将整个文件名存储在VAR中。这就是%var:~16%仅导致file而不是file name.txt的原因。我假设您在某处指定VAR

SET VAR=%1

你需要这样做:

SET VAR=%1 %2

或者在调用批处理文件时在文件名周围插入双引号,然后像这样设置var以删除引号:

SET VAR=%~1

这应该足以让您的批处理工作。

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

但是,为了回答您实际问过的问题,我将向您展示一种从var中提取“file name.txt”的方法,该方法即使有多于或少于16个前缀字符也能正常工作。

使用for /f语句,指定第三个标记,并使用下划线作为分隔符。这是一个独立的例子。 (要从命令行运行,请将%%x更改为%x

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

请记住,如果您不修复代码以确保您的VAR变量中包含整个文件名,此解决方案将修复您的问题。

答案 1 :(得分:0)

你试过这个吗?

set VAR="%VAR:~16%"