0

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

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

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

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

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

4

2 回答 2

3

您的方法虽然不雅且不灵活,但应该有效。这告诉我您没有将整个文件名存储在VAR. 这就是为什么%var:~16%只有结果file,而不是file name.txt。我假设你VAR在某处这样分配:

SET VAR=%1

您需要执行以下操作:

SET VAR=%1 %2

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

SET VAR=%~1

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

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

但是,为了回答您实际提出的问题,我将向您展示一种从中提取“文件名.txt”的方法,var即使前缀字符多于甚至少于 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包含整个文件名,则此解决方案将无法解决您的问题。

于 2012-08-28T15:41:13.447 回答
0

你试过这个吗?

set VAR="%VAR:~16%"
于 2012-08-28T15:12:09.517 回答