bat файл для изменения даты и времени файлов в папке с сегодняшней датой и временем чтения имени файла из текстового списка - PullRequest
0 голосов
/ 04 октября 2019

У меня есть папка с большим количеством файлов, эти файлы будут периодически удаляться с использованием даты и времени (старые будут удалены автоматически).

Мне нужно сохранить некоторые файлы в этой папке и предотвратить ихпри удалении автоматически обновляется время даты файла.

Имена файлов, для которых необходимо обновлять время даты, сохраняются в текстовом файле, который содержит только имя файла для обновления даты и времени файлов.

Моя ОС - 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 эти файлы нуждаются в дате и времени для обновления в сегодняшнее / текущее время даты

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,,+

Ответы [ 2 ]

0 голосов
/ 05 октября 2019

Чтобы обработать пути / имена файлов с пробелами, вы должны заключить их в кавычки как

"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).

0 голосов
/ 04 октября 2019

Это полное и рабочее решение.

Вот мой путь:

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",,+
)
...