Я пытаюсь переименовать большой пакет файлов, чтобы включить даты в столбце «Дата изменения» из Проводника в каждое имя файла в формате ГГГГММДД. Я смог сгенерировать отчет из нужной файловой папки со всеми файлами внутри, выполнив следующие действия:
каталог> имя файла. txt
Затем я вытащил отчет в Excel как текстовый файл с разделителями и изменил его содержимое, так что теперь у меня есть дата «последнего изменения» в одном столбце и имя файла в другом:
Дата изменения | Имя файла
09.01.2009 | ArcGIS_TT_Projection_Transformations.doc
18.02.2014 | ArcGIS_TT_Re-Projection_WMAS.docx
09.01.2009 | ArcGIS_TT_Set_Selectable_Layers.doc
09.01.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, который я могу использовать для автоматического добавления информации об изменении даты в имя файла?
Спасибо за вашу помощь!
Хорошо @newbie, вот код, который вам нужно использовать для итерации текстовых файлов, получения даты изменения каждого файла, копирования каждого файла, используя дату изменения как часть имени файла, и удалите исходные файлы. Вы были очень близки, но вам не хватало некоторых вещей.
Чтобы получить дату изменения файла, мы можем использовать set "MDate = %% ~ tF"
.
Чтобы проанализировать дату который предоставляется параметром set "MDate = %% ~ tF"
, вам нужно будет указать, какие части значения, сохраненного% MDate%, вы хотите использовать в выводе. Вы можете использовать команду set "ParsedDate =! MDate: ~ 6,4 !! MDate: ~ 0,2 !! MDate: ~ 3,2!"
для преобразования вывода набора » MDate = %% ~ tF "
от ММ / ДД / ГГГГ чч: мм до ГГГГММДД.
После этого мы можем копировать файлы в новые файлы, используя значение% ParsedDate% в имени файла.
Вы должны увидеть две копии файлов. Если вы хотите удалить исходные файлы, нам просто нужно запустить команду для %% F в ("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) }
Объяснение:
-Recurse
для получения файлов из подкаталогов.ToString()
позволяет форматировать так, как вам нужно