VBS/WSH/JS - преобразование формата даты в текстовом файле

Аватара пользователя
slnt

VBS/WSH/JS - преобразование формата даты в текстовом файле

Сообщение slnt »

Доброе время суток!

Столкнулся со следующей проблемой: в каталоге C:\ID находится порядка 30-40 txt файлов в них дата с форматом 31.12.1970, необходимо преобразовать в формат 1970-12-31 желательно во всех файлах разом.
Аватара пользователя
Elven

Re: VBS/WSH/JS - преобразование формата даты в текстовом файле

Сообщение Elven »

в названии или в содержимом? если в содержимом какой формат строки?
Аватара пользователя
slnt

Re: VBS/WSH/JS - преобразование формата даты в текстовом файле

Сообщение slnt »

Цитата slnt:



порядка 30-40 txt файлов в них дата с форматом 31.12.1970
VBS/WSH/JS - преобразование формата даты в текстовом файле




Упакуйте два-три таких файла в архив и выложите сюда или на RGhost.
Аватара пользователя
slnt

Re: VBS/WSH/JS - преобразование формата даты в текстовом файле

Сообщение slnt »

Код PowerShell:





Код:

Код: Выделить всё

gci 'C:\ID\*.txt'|%{
 sc $_ (gc $_|%{
  ($_.Split('\|')|%{
   if(([Regex]::Match($_,'^[0-3]\d\.[01]\d\.[1-9]\d{3}$')).Success){
    $_=(Get-Date $_ -Format 'yyyy-MM-dd')
   };$_
  }) -join '|' -replace '\|$'
 })
}

.
Вложения
ssp.rar
(606 байт) 0 скачиваний
ssp.rar
(606 байт) 0 скачиваний
Аватара пользователя
slnt

Re: VBS/WSH/JS - преобразование формата даты в текстовом файле

Сообщение slnt »

Georgio, а для чего Вы разбивали строки на составляющие по «.Split()»? Я не пойму цель этого.
Аватара пользователя
Iska

Re: VBS/WSH/JS - преобразование формата даты в текстовом файле

Сообщение Iska »

Georgio, а для чего Вы разбивали строки на составляющие по «.Split()»? Я не пойму цель этого.
Аватара пользователя
Iska

Re: VBS/WSH/JS - преобразование формата даты в текстовом файле

Сообщение Iska »

Iska, да это первое, что в голову пришло: проверить составляющие на соответствие шаблону даты и заменить. А как бы Вы написали?
Аватара пользователя
Georgio

Re: VBS/WSH/JS - преобразование формата даты в текстовом файле

Сообщение Georgio »

Я бы, наверное, сразу во всей строке делал замену, наподобие:

Код:

Код: Выделить всё

Get-ChildItem -Path 'C:\Мои проекты\05\ssp\*.txt' | ForEach-Object -Process {
    Set-Content -Path $_ -Value (
        Get-Content -Path $_ | ForEach-Object -Process {
            $_ -replace '(\d{2})\.(\d{2})\.(\d{4})', '$3-$2-$1'
        }
    )
}

Если файлы не слишком большие — быстрее будет и вовсе обойтись без перебора отдельных строк.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»