Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Закладки » Сценарии для Windows

Модерирует : KLASS, IFkO

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225

Открыть новую тему     Написать ответ в эту тему

KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Старые и смежные темы: по CMD и в Программах | по PowerShell | В помощь системному администратору | Прикладное программирование

PowerShell
Версии | Ассоциация и подпись сценариев
Сценарий для ассоциации файлов PowerShell и запуска неподписанных скриптов.
 
Прочее
Расширение возможностей
Функции
Write-Color
Output-DebugString
Провайдеры
Готовые скрипты
Полезные ссылки | Будет ли репозиторий PowerShell на ru-board?
Книги в PDF
Cheat Sheets
 

Cmd
Для перекодирования кириллицы 866<—>1251 пользуйтесь онлайн сервисом Перекодировщик кириллицы
 
Готовые решения и частые вопросы
 
Описания работы команд и символов участниками темы:
setlocal enabledelayedexpansion и переменные окружения
символы & и && в командной строке
Переменная %0
 
Полезные ссылки и утилиты

WSH (VBScript, JScript)
Программирование "удобняшек" на VBScript

Примечания:
• Большие куски кода заключайте в тэг [ more ]
• Чтобы не копировались концевые пробелы из форума, жмите на ссылку "Редактировать" в посте, и уже из редактора копируйте код без пробелов иначе сценарий может работать неправильно. Также для удаления концевых пробелов пользуйтесь скриптом от Nagual, или VBS-Скрипт-Модулем от ViSiToR.
• Сторонние консольные утилиты можно использовать только в виде готового решения и только в рамках сценариев. Никаких обсуждений и обучений работе с утилитами не предусмотрено и прямо запрещено правилами топика.
Шапка и около-темные вопросы |

Всего записей: 11062 | Зарегистр. 12-10-2001 | Отправлено: 13:40 17-02-2018 | Исправлено: YuS 2, 08:24 19-06-2021
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А если внешний сервис
PowerShell
Код:
$ip = Invoke-RestMethod -Uri 'https://api.ipify.org?format=json'
"My public IP address is: $($ip.ip)"

оттуда: ipify - A Simple Public IP Address API

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 19:00 29-11-2019
KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
У меня через test-netconnection адрес шлюза выдает, с предупреждением

Цитата:
ПРЕДУПРЕЖДЕНИЕ: Trace route to destination 5.255.255.88 did not complete. Trace terminated :: адрес шлюза

 
Добавлено:
iNNOKENTIY21
Через внешний сервис получится, если на данный момент сервер прова дал белый IP роутеру, если
IP выдан из внутренней (частной) сети провайдера, то прилетит белый IP через который ходит сетка провайдера в Инет,
но к роутеру тот адрес никак не прилепить.

Всего записей: 11062 | Зарегистр. 12-10-2001 | Отправлено: 19:01 29-11-2019
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21

Цитата:
внешний сервис

Внешним можно, но там тоже не всё безоблачно... очень многое зависит от провайдера.
 
KLASS
 29-11-2019

Цитата:
это уже завтра потестирую ещё, и напрямую, без усилителя, тоже, возможно, он режет...

в общем, роутер такой, не отдает маршрут он ping-у
а test-netconnection, по-прежнему не показывает WAN IP, только шлюз
 

Цитата:
test-netconnection адрес шлюза выдает

Не знаю почему, но вот так он работает...
 

Цитата:
с предупреждением

предупреждение о том, что маршрут неполный и прерван параметром -Hops 2, если его не указывать, то предупреждения не будет.
 
Добавлено:
Либо параметр в командлет добавить:  

Код:
test-netconnection www.yandex.ru -tr -h 2 -wa 0

- это тоже уберет предупреждение...
а вообще, по сути, в таком виде - это аналог cmd команды tracert

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 08:46 30-11-2019 | Исправлено: YuS_2, 08:40 03-12-2019
Falcon99



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Опять я с просьбой к сообществу.  
Я уже писал ранее что у нас в организации сканируют документацию, причем сканирую текстовую часть в pdf и графическую часть в tiff.
Анализируя отсканированную графику обратил внимание что в каталоге много дублей.
Поэтому прошу помощью в создании скрипта чтобы получить список дублей.  
Отлавливать надо по названию файлов.  
Все названия графических файлов имеют следующую структуру имени: описательная часть-номер. Описательная часть имени состоит из букв и символов, а номер это четырехзначное число.
Насколько я понимаю, необходимо создать список всех файлов в каталоге, и уже потом его анализировать, последовательно сравнивая каждую строку со всем списком, при нахождении идентичного номера, проверять на полную идентичность, чтобы не копировать тут строку которую в данный момент сравниваем, если номера совпадают, а текстовая часть нет, то заносим название файла в список дублей, проверяем далее. Правда при этом в списке дублей тоже будут дублирующиеся строки, так что надо как-то анализировать и его чтобы не заносить повторно названия файлов с одинаковыми именами.

Всего записей: 607 | Зарегистр. 12-10-2005 | Отправлено: 11:00 02-12-2019 | Исправлено: Falcon99, 11:14 02-12-2019
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Falcon99
Цитата:
в каталоге много дублей

Цитата:
если номера совпадают, а текстовая часть нет, то заносим название файла в список дублей

Если номера совпадают, так ить всегда текстовая не будет совпадать, иначе это одно имя, что не возможно в файловой системе.
Так в чём отличие, только в номере?

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 13:53 02-12-2019
Falcon99



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21

Цитата:
Если номера совпадают, так ить всегда текстовая не будет совпадать, иначе это одно имя, что не возможно в файловой системе.
Так в чём отличие, только в номере?  

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

Всего записей: 607 | Зарегистр. 12-10-2005 | Отправлено: 16:51 02-12-2019 | Исправлено: Falcon99, 16:53 02-12-2019
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Falcon99
Цитата:
Мне нужно отловить вариант когда совпадают номера, при различиях в текстовой части.
Последовательно копипастим код в консоль и жмём enter
Набор имён файлов
Код:
$Files = 'AAAA-0001', 'BBBB-0001', 'CCCC-0001', 'AAAA-0002', 'BBBB-0002', 'CCCC-0002', 'AAAA-0003', 'BBBB-0003', 'CCCC-0003', 'AAAA-0004', 'BBBB-0005', 'CCCC-0006'

Группировка по номерам в имени файла
Код:
$Files | Group-Object { $PSItem.Split('-')[1] } | Where-Object Count -gt 1

или список файлов с дублями номеров
Код:
$Files | Group-Object { $PSItem.Split('-')[1] } | Where-Object Count -gt 1 | ForEach-Object { $_.Group }

Похоже? Намекаю, неплохо бы увидеть список имён файлов

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 18:15 02-12-2019
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, Falcon99
Много тяжеловеснее - решение на JScript
 
UPD - сообразил. Не то. Как сравнивать PDF файлы по содержимому? Достаточно ли будет только размера?
UPD2 - Сравнение по размеру и номерам pdf файлов -  
Подробнее...

Всего записей: 1883 | Зарегистр. 07-08-2002 | Отправлено: 19:14 02-12-2019 | Исправлено: Alex_Piggy, 19:45 02-12-2019
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy
Цитата:
Как сравнивать PDF файлы по содержимому? Достаточно ли будет только размера?  

Если имеется в виду идентичность файлов, то по хэшу.
PowerShell
Код:
ls $env:TMP -File | Get-FileHash -ea si | group hash | ? Count -gt 1 | % Group

У меня в temp оказались:
Вывод в консоли:

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 21:12 02-12-2019
Falcon99



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нет все гораздо проще, сравнивать сами файлы не требуется, только их названия.
Текстовая части сильно различаются у файлов, анализировать надо только последних четыре цифры. Именно по ним надо отлавливать те файлы у которых они совпадают.
Т.е. примерно в следующем наборе файлов:
 
ООО Межтехмонтаж-145-7283.tif
ЗАО_Межтехмонтаж, 145 - 7283.tif
Малый Саперный, 27-3571.tif
Старый проект -72-1289.tif
Чертеж непонятны-1378.tif
 
Нам нужно вынести в отдельный список название первых двух файлов.

Всего записей: 607 | Зарегистр. 12-10-2005 | Отправлено: 09:13 03-12-2019 | Исправлено: Falcon99, 09:17 03-12-2019
Jonmey

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Falcon99
Ваша задача элементарно решается в любом приличном текстовом редакторе. Например.
Копируете свой список файлов в редактор. Следите. чтобы не было пробелов в конце и начале имен. Одно имя в строке.
 
ООО Межтехмонтаж-145-7283.tif  
ЗАО_Межтехмонтаж, 145 - 7283.tif  
Малый Саперный, 27-3571.tif  
Старый проект -72-1289.tif  
Чертеж непонятны-1378.tif  
 
Далее, для наглядности решения копируете 4 цифры в начало, типа замены
 
^([^\r\n]*)([0-9]{4})(\.tif)
на
\2###\1\2\3
 
Затем сортируете строки (штатная возможность в редакторах). Получаете
 
1289###Старый проект -72-1289.tif
1378###Чертеж непонятны-1378.tif
3571###Малый Саперный, 27-3571.tif
7283###ЗАО_Межтехмонтаж, 145 - 7283.tif
7283###ООО Межтехмонтаж-145-7283.tif
 
Теперь удаляете одинарные строки:
(?<!\1\.tif[\r\n]+)([0-9]{4})([^\r\n]+\1.tif[\r\n]+)(?!\1)
 
Теперь удаляете первые 7 знаков в каждой строке
^.{7}
 
ЗАО_Межтехмонтаж, 145 - 7283.tif
ООО Межтехмонтаж-145-7283.tif
 
Получаете список файлов с дубликатными номерами.
Может где-то не предусмотрел все возможные варианты (список-пример короткий), но идея думаю понятна, проста и под силу широкому кругу юзеров.

Всего записей: 1316 | Зарегистр. 17-01-2011 | Отправлено: 10:27 03-12-2019 | Исправлено: Jonmey, 10:27 03-12-2019
MalinaSinia

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Ваша задача элементарно решается в любом приличном текстовом редакторе.

 
Jonmey
В корпорации с сотнями компьютеров?

Всего записей: 7 | Зарегистр. 30-11-2019 | Отправлено: 10:30 03-12-2019
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, Falcon99
Тогда Вам годится первое решение, которое я предлагал - только убрать тире в регекспе. Будет искать группу в 4 цифры, после которых точка.

Код:
 
var initFolder = "D:\\Downloads\\2019_11_29"
var regex = /(\d{4})\./
 
var fso = new ActiveXObject("Scripting.FileSystemObject");
var filelist = {};
var oLog = fso.CreateTextFile("duplicates.log", true);
recurseFiles (initFolder);
for (dd in filelist) {if (filelist[dd].length>2) oLog.WriteLine(dd + '\r\n\t' + filelist[dd].join('\r\n\t'));}
 
function recurseFiles (vFolder) {
  var oBFolder = fso.GetFolder(vFolder);
  var eFiles = new Enumerator (oBFolder.Files);
  var eFolders = new Enumerator (oBFolder.SubFolders);
  for (;!eFiles.atEnd();eFiles.moveNext()) {
    var match = eFiles.item().Name.match(regex);
    if (match == null || match.length == 1) {
      addElem("unknown", eFiles.item().Path);
    } else {
      for (var i=1; i < match.length; i++) {addElem(match[i],eFiles.item().Path);}  
    }
  }
  for (;!eFolders.atEnd();eFolders.moveNext()) {recurseFiles(eFolders.item().Path);}
}
 
function addElem (vName, vData) {
  if (filelist[vName]==null) filelist[vName]=[];
  filelist[vName].push(vData);
}
 

Всего записей: 1883 | Зарегистр. 07-08-2002 | Отправлено: 10:33 03-12-2019
Jonmey

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MalinaSinia

Цитата:
В корпорации с сотнями компьютеров?

Список-то один, а компов - хоть миллион.
Хотя, если речь о корпорации "Рога и копыта", где все компы работают сами по себе - кто в лес, кто по дрова, а результаты работы записывают на листочках и собирают вручную, то ps в этом случае также не поможет.
***
И да, сказанное выше может быть записано в виде многошаговой операции в powergrep и выполняться из батника одним кликом (программа поддерживает работу из комстроки)

Всего записей: 1316 | Зарегистр. 17-01-2011 | Отправлено: 10:34 03-12-2019 | Исправлено: Jonmey, 10:41 03-12-2019
MalinaSinia

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Jonmey
Спасибо, учту

Всего записей: 7 | Зарегистр. 30-11-2019 | Отправлено: 10:38 03-12-2019
Falcon99



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy
Проверил, к сожалению лог пуст, хотя я точно знаю что дубли есть.
 
Jonmey
Подскажите пожалуйста в каком редакторе возможно проводить такие операции над строками таким образом. Просто я не использовал никогда такие операции и мне не известно каким образом и в чем это возможно.  
Для работы использую AkelPad.

Всего записей: 607 | Зарегистр. 12-10-2005 | Отправлено: 11:09 03-12-2019
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Falcon99

Цитата:
Проверил, к сожалению лог пуст, хотя я точно знаю что дубли есть.  

1. Папку, в которой будет искать указали (initFolder)? Можно указать просто точку.
2. "filelist[dd].length>2"  наверное здесь ошибка... Попробуйте исправить на  "filelist[dd].length>=2" - чтобы показывались дубликаты, или  "filelist[dd].length>0" - чтобы был выведен список всех файлов.

Всего записей: 1883 | Зарегистр. 07-08-2002 | Отправлено: 11:19 03-12-2019
Falcon99



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy
Спасибо. Ошибка была у меня, монтировал каталог через subst и initFolder указал неверно. Список получил, теперь можно приступить к чистке.
 
Пока занимался с этим наткнулся на еще одну "потребность". Есть каталог со временными файлами, теже сканы через него передаются. Имеет структуру:
 
Сканы
  102
  105
  203
  213
 
Т.е. корень в котором лежат каталоги соответствующие номерам кабинетам. Раз в месяц производится очистка от файлов что старше месяца и пересоздаются корневые каталоги следующим скриптом:

Код:
@echo off
rem папка источник
set src=G:\Сканы
rem папка получатель  
set dst=G:\Сканы_olds
rem Очищаем папку получатель
for /R "%dst%" %%F in (.) DO IF NOT "%%F"=="%dst%." (RD /S /Q "%%F") ELSE (Del /F /S /Q "%dst%*")
rem Переносим файлы старше 31 из исходной папки в папку получатель с сохранением структуры
robocopy "%src%" "%dst%" /minage:31 /copyall /move /e /r:2 /xf file scanner_8310.ico dirs.lst /XD dirs
rem из файла G:\Сканы\dirs.lst берем список необходимых каталогов в папке MFU и пересоздаем, на случай  
rem если они были пустыми были удалены предыдущей командой  
@<"%src%\dirs.lst" (for /f "delims=" %%i in ('more') do @md "%src%\%%~i")  
pause

 
Можно ли как-то производит очистку чтобы не затрагивались каталоги кабинетов, а то бывает форс-мажор когда каталог был создан, но не внесен в список. Плюс такой скрипт можно было бы использовать в других сетевых "хламовниках".
 

Всего записей: 607 | Зарегистр. 12-10-2005 | Отправлено: 11:56 03-12-2019
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Falcon99
Цитата:
…Нам нужно вынести в отдельный список название первых двух файлов.  

Вот. Предыдущий вариант не катит, ибо два и более минуса в имени…
А так, то же самое, только, почему группировать изменить, например на { $_.BaseName -replace '^(.+)?-?(\d{4})$', '$2' }
 
Набор файлов
Код:
"U:\Projects\Source\PowerShell\Sample\Test\Малый Саперный, 27-3571.tif"
"U:\Projects\Source\PowerShell\Sample\Test\ООО Межтехмонтаж-145-7283.tif"
"U:\Projects\Source\PowerShell\Sample\Test\Старый проект -72-1289.tif"
"U:\Projects\Source\PowerShell\Sample\Test\Чертеж непонятны-1378.tif"
"U:\Projects\Source\PowerShell\Sample\Test\ЗАО_Межтехмонтаж, 145 - 7283.tif"

Пример на PowerShell
Код:
Get-ChildItem -File 'U:\Projects\Source\PowerShell\Sample\Test' |
    Group-Object { $_.BaseName -replace '^(.+)?-?(\d{4})$', '$2' } |
    Where-Object Count -gt 1 |
    ForEach-Object { $_.Group }

Результат
Код:

    Каталог: U:\Projects\Source\PowerShell\Sample\Test
 
 
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       03.12.2019     12:45              0 ЗАО_Межтехмонтаж, 145 - 7283.tif
-a----       03.12.2019     12:45              0 ООО Межтехмонтаж-145-7283.tif

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 11:56 03-12-2019
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Falcon99

Цитата:
примерно в следующем наборе файлов:

Примерно так:

Код:
$fld = 'd:\folder'
 
dir $fld -file|group{$_.basename -replace '^.*(\d[\d_\s-]*)','$1' -replace '\s'}|? count -gt 1|% group

 

Цитата:
Нам нужно вынести в отдельный список название первых двух файлов.

С желаниями надо быть осторожнее, они могут исполниться
В том смысле, что необходимо точнее формулировать задачу...
Вам надо список "копий" в одном файле или для каждого набора "копий" отдельный файл-лог?

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 12:04 03-12-2019
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Закладки » Сценарии для Windows


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru