我正在制作一个自动备份文件的程序,最多可存储五个文件,并且可以选择恢复五个文件中的任何一个。备份文件时,它会以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
答案 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%"