bat 文件用今天的日期时间更改文件夹中文件的日期时间从文本列表中读取文件名

bat file to change date time of files in a folder with today date time reading the file name from a text list

我有一个包含大量文件的文件夹,这些文件将使用日期时间定期删除(旧的将自动删除)。

我需要在这个文件夹中保留一些文件,防止它们被自动删除更新文件的日期时间。

持续更新日期时间的文件名保存在一个文本文件中,该文件只包含持续更新文件日期时间的文件名。

我的 OS 是 Windows 7 32 位语言意大利语

我加个例子:

包含所有文件的文件夹:

log1.txt modified date lunedì ‎1 ‎gennaio ‎2019, ‏‎00:00:00
log2.txt modified date lunedì ‎1 ‎gennaio ‎2019, ‏‎00:03:00
log3.txt modified date lunedì ‎1 ‎gennaio ‎2019, ‏‎00:06:00
log6.txt modified date lunedì ‎1 ‎gennaio ‎2019, ‏‎00:08:00
log7.txt modified date lunedì ‎1 ‎gennaio ‎2019, ‏‎00:30:00
log9.txt modified date lunedì ‎1 ‎gennaio ‎2019, ‏‎00:40:00
log152.txt modified date lunedì ‎1 ‎gennaio ‎2019, ‏‎01:10:00

list.txt 的内容以及要更新修改日期时间的文件名:

log7.txt
log152.txt
log555.txt
log785.txt
log10150.txt

在这种情况下,在 运行 bat 文件之后,这些文件需要在 today/now 日期时间

更新日期时间
log7.txt modified date venerdì ‎4 ‎ottobre ‎2019, ‏‎16:00:00 (today)
log152.txt modified date venerdì ‎4 ‎ottobre ‎2019, ‏‎16:00:00 (today)

当未包含在要更新的文件列表中时,不应更改所有其他文件。

包含要更新的文件的文件夹路径中有空格。

要更新的文件列表保存在不同的文件夹中。

这是我尝试复制同一文件夹中的文件以更新日期时间的代码,但我只需要更新保存在文本列表中的文件名。

cd C:\Users\Windows\Desktop\test
copy C:\Users\Windows\Desktop\test,,+

这是完整有效的解决方案。

这些是我的路径:

Path folder: D:\Programmi Installati\MyFolder
Path list: D:\Programmi Installati\list.txt
@echo off
pushd "D:\Programmi Installati\MyFolder\"
setlocal enabledelayedexpansion
for /f %%G in ('type "D:\Programmi Installati\list.txt"') do (
  copy "%%G",,+
)

要处理带空格的 paths/filenames,您必须像

这样引用它们
"D:\Programmi Installati\list.txt"

告诉解析器它是一个实体。

不幸的是,for 语法将带引号的字符串解释为字符串,而不是文件名,所以这个

for /f %%a in ("D:\Programmi Installati\list.txt") do ...

不起作用(好吧 - 它起作用了,但它不会处理文件的内容,而是处理文字字符串 D:\Programmi Installati\list.txt)。要实际处理文件的内容,您需要告诉 for 解释不同的引号:

for /f "usebackq delims=" %%a in ("D:\Programmi Installati\list.txt") do ...

其中 usebackq 改变了方式,解释了括号之间的引号,并且 delims= 告诉它不要分隔行(以防万一文件中有空格,例如log 777.txt).