Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Out-File -избежать создания пустого файла

Ответить
Настройки темы
PowerShell - [решено] Out-File -избежать создания пустого файла

Новый участник


Сообщения: 25
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: solonenko
Дата: 04-03-2020
Описание: Set-Content
Добрый день.
Имеется текстовый файл, каждая строка начинается с "1;№телефона;*". Задача проверить на соответствие маске "79*********" и записать в лог-файл, если есть некорректные телефоны
Код: Выделить весь код
$bird=$null
$stringnew=$null
$stringnew = (Get-Content "C:\fb\EXT.txt").Trim() #читаем файл - отрезаем возможные пробелы
foreach ($bird in $stringnew) { #проверяем в цикле каждую строку на корректность номера
if ($bird -notmatch '^?;79\d{9};') #шаблон
    {
    "Ошибка шаблона;"+$bird | Out-File -FilePath c:\fb\EXT_ERROR_PHONE.txt -Append #если не соответствует маске - в эррор-файл
    }
else
{
$bird | Out-File -FilePath C:\fb\EXT_OUT.txt -Append #если соответствует маске - в работу
}
}
Если строка содержит некорректный №тел - создается файл -все ок.
Если строка НЕ содержит некорректный №тел - создается пустой файл EXT_ERROR_PHONE.txt
Как этого избежать

p\s
Код: Выделить весь код
(Get-Content "C:\fb\EXT_.txt").Trim() | Where-Object {$_ -notmatch '^?;79\d{9};'} | Out-File c:\fb\EXT_ERROR_PHONE.txt
Та же история, пустой файл есть (а он мне не нужен). Подозреваю - причина одна...

*Set-Content также себя ведет

Отправлено: 15:20, 04-03-2020

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6666
Благодарности: 1553

Профиль | Отправить PM | Цитировать


Пример файла дайте

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:39, 04-03-2020 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 25
Благодарности: 0

Профиль | Отправить PM | Цитировать



Цитата DJ Mogarych:
Пример файла дайте »
EXT.txt

Отправлено: 15:50, 04-03-2020 | #3


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6666
Благодарности: 1553

Профиль | Отправить PM | Цитировать


Наверное, так:
Код: Выделить весь код
$right,$wrong = (gc D:\temp\ext.txt).trim().where({$_ -match "^?;79\d{9};"}, 'Split')
$right |Out-File C:\fb\EXT_OUT.txt -Append
if ($wrong) {$wrong |% {"Ошибка шаблона;"+$_} |Out-File C:\fb\EXT_ERROR_PHONE.txt -Append}

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:54, 04-03-2020 | #4


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1231
Благодарности: 515

Профиль | Отправить PM | Цитировать


Цитата solonenko:
'^?;79\d{9};' »
Любопытный шаблон...
Совпадает, если начало строки ноль или один, за которым следует точка с запятой, за ней сразу же следует символ семь, затем девять, за ней девять любых цифр и точка с запятой - он точно у Вас работает? Ибо на тексте, который был показан, совпадения никогда не будет найдено и все строки будут в логе ошибок.
Цитата solonenko:
Как этого избежать »
Код: Выделить весь код
if ($a = (sls ext.txt -patt '^[^;]*;\s*79\d{9}' -not -enc default)){$a.line.trim()|out-file error.txt -enc default}

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 04-03-2020 в 18:28.

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:42, 04-03-2020 | #5


Новый участник


Сообщения: 25
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
Любопытный шаблон... »
Да, для моей задачи этого достаточно.
За комментарий спасибо, изучу.

DJ Mogarych,
Спасибо

Отправлено: 18:12, 04-03-2020 | #6


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1231
Благодарности: 515

Профиль | Отправить PM | Цитировать


Цитата solonenko:
Да, для моей задачи этого достаточно. »
А, ну да, работать-то он будет... но составлен неверно, в этой части:
Код: Выделить весь код
^?
- так шаблоны не составляют, в этом нет смысла. Либо учитывать начало строки (тогда пишут "^"), либо не учитывать (тогда символ "^" не пишут). А квантификатор "?" обычно используют с реальными символами или классами символов...

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:28, 04-03-2020 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Out-File -избежать создания пустого файла

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - CMD проверка создания файла за (сегодня вчера) с созданием флагового файла yamixon Скриптовые языки администрирования Windows 5 17-03-2015 08:40
Разное - Макрос - как избежать появления предупреждений у пользователей файла flower Microsoft Office (Word, Excel, Outlook и т.д.) 1 21-01-2015 02:37
Разное - Scripting Runtime: Ошибка ReadLine из пустого файла Gamover jr Программирование и базы данных 8 05-05-2008 09:24
Время создания файла Alexey1974 Microsoft Windows NT/2000/2003 0 09-04-2007 20:28
[решено] Способ копирования защиненного файла (Когда - File sharing violation) RVGroup Microsoft Windows 2000/XP 3 25-10-2006 11:21




 
Переход