Переименуйте файлы, чтобы добавить дату, измененную к имени файла, с помощью Windows CMD или простого.TXT.
Я пытаюсь переименовать большую группу файлов, чтобы включить даты в столбце "Дата изменения" из Проводника файлов в каждое имя файла в формате ГГГГММДД. Мне удалось создать отчет из нужной папки с файлами всех файлов внутри, выполнив следующие действия:
- Нажмите на папку Советы и хитрости
- Удерживая клавишу Shift, щелкните правой кнопкой мыши папку "Советы и хитрости".
- Нажмите "Открыть командное окно здесь"
- Тип
dir>filename.txt
- Нажмите Enter
- Откройте папку Tips and Tricks и найдите текстовый файл с именем файла, который вы создали
Затем я перетащил отчет в Excel в виде текстового файла с разделителями и изменил его содержимое, поэтому теперь у меня есть дата "последнего изменения" в одном столбце и имя файла в другом:
Дата изменения | Имя файла
1/9/2009 | ArcGIS_TT_Projections_Transformations.doc
18.02.2014 | ArcGIS_TT_Re-Projection_WMAS.docx
1/9/2009 | ArcGIS_TT_Set_Selectable_Layers.doc
1/9/2009 | ArcGIS_TT_Spatial_Join.doc
21.04.2010 | ArcGIS_TT_View_CLU_History_Layer.doc
Я имел успех только с помощью сценариев переименования, как показано ниже:
@echo off
setlocal enableDelayedExpansion
for %%F in ("ArcGIS_TT_Projections_Transformations*.txt") do (
set "name=%%F"
ren "!name!" "!name:ArcGIS_TT_Projections_Transformations=ArcGIS_TT_Projections_Transformations_20090109!"
)
pause
Но я стараюсь не повторять этот процесс для 61 файла. У кого-нибудь есть предложение Windows CMD или простой.txt, который я могу использовать для более автоматической загрузки информации о дате изменения в имя файла?
Спасибо за вашу помощь!
1 ответ
Хорошо, @newbie, вот код, который вам нужно использовать для итерации текстовых файлов, получения даты изменения каждого файла, копирования каждого файла с использованием даты изменения как части имени файла и удаления исходных файлов. Вы были очень близки, но вам не хватало нескольких вещей.
Чтобы получить дату изменения файла, мы можем использовать set "MDate=%%~tF"
,
Для анализа даты, которая предоставляется set "MDate=%%~tF"
вам нужно будет указать, какие части значения хранятся в%MDate%, которые вы хотите использовать в выводе. Вы можете использовать команду set "ParsedDate=!MDate:~6,4!!MDate:~0,2!!MDate:~3,2!"
преобразовать вывод set "MDate=%%~tF"
от ММ / ДД / ГГГГ чч: мм до ГГГГММДД.
После этого мы можем скопировать файлы в новые файлы, используя значение%ParsedDate% в имени файла.
Вы должны увидеть две копии файлов. Если вы хотите удалить исходные файлы, нам просто нужно запустить команду for %%F in ("C:\test\*.txt") do ( del %%F )
, Это оставит вас с переименованными текстовыми файлами. Чтобы преобразовать.txt.new в.txt, используйте команду ren "C:\test\*.new" *.
,
Поскольку мы находимся в цикле for, нам нужно изменить способ обращения с varables (который основан на том, что вы уже написали, что вы уже знаете). Мы меняем% на! для имен переменных внутри цикла. Так что если у вас есть имя переменной example
вы бы ссылались на переменную, используя !example!
внутри цикла вместо %example%
,
Чтобы переменные внутри цикла работали, нам также нужно добавить команду setlocal enabledelayedexpansion
перед петлей.
Это должно охватывать все. Пожалуйста, не стесняйтесь голосовать или пометить ответ как правильный, если это решит вашу проблему.
Полный пакетный файл представлен ниже.
setlocal enabledelayedexpansion
for %%F in ("C:\test\*.txt") do (
set "MDate=%%~tF"
set "ParsedDate=!MDate:~6,4!!MDate:~0,2!!MDate:~3,2!"
copy %%F %%~dpnF_!ParsedDate!%%~xF.new )
for %%F in ("C:\test\*.txt") do (
del %%F )
ren "C:\test\*.new" *.
exit
В Powershell вы можете сделать это с помощью однострочника:
Get-ChildItem |Foreach-Object { Rename-Item $_ -NewName ("{0}-{1}{2}" -f $_.BaseName,$_.LastWriteTime.ToString('yyyyMMdd'),$_.Extension) }
Пояснение:
- Get-ChildItem: получает все элементы в каталоге. Вы могли бы добавить
-Recurse
также получать файлы из подкаталогов - Foreach-Object: запустите следующий блок кода с каждым файлом
- $ _: Текущий повторяемый файл как объект
- $_. BaseName: имя файла без расширения.
- $_. LastWriteTime: время последней записи в виде объекта DateTime
Метод.ToString()
позволяет форматировать так, как вам нужно - $_. Расширение: расширение файла.