![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Имя и описание файла в текстовый файл |
|
|
Любой язык - [решено] Имя и описание файла в текстовый файл
|
Ветеран Сообщения: 2205 |
В папке имеются файлы типа lync2016-kb3118327-fullfile-x86-glb.exe, необходимо создать текстовый файл с именем KB3118327 и цифрой в зависимости от первого слова описания файла, например:
для access2016-kb2910978-fullfile-x86-glb.exe первое слово описания "Security", в текстовый файл записывается KB2910978-2 для outlfltr2016-kb3115407-fullfile-x86-glb.exe первое слово описания "Definition", в текстовый файл записывается KB3115407-3 для publisher2016-kb3114368-fullfile-x86-glb.exe первое слово описания "Update", в текстовый файл записывается KB3114368-1 Желательно с использованием сторонней утилиты+cmd или чистого vbs, должен создаваться один текстовый файл с записями в столбик. |
|
Отправлено: 19:41, 13-01-2017 |
Забанен Сообщения: 793
|
|
Отправлено: 21:17, 13-01-2017 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2205
|
Профиль | Отправить PM | Цитировать Цитата greg zakharov:
Надеюсь, что найдётся вариант на vbs или на cmd+сторонняя утилита. |
|
Отправлено: 09:02, 14-01-2017 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата sov44:
Затем можно будет использовать скрипты, указывая их по относительному или полному пути. |
|
Отправлено: 20:19, 14-01-2017 | #4 |
Забанен Сообщения: 793
|
/* 2>nul @echo off setlocal enabledelayedexpansion set "i=0" for %%i in (%*) do set /a "i+=1" if !i! neq 2 echo:Out of range.&goto:eof if not exist "%~1" echo:Folder does not exist.&goto:eof set "key=HKLM\SOFTWARE\Microsoft\.NETFramework" for /f "tokens=3" %%i in ( '2^>nul reg query %key% /v InstallRoot' ) do set "root=%%i" if /i "%root%" equ "" echo:.NET not found.&goto:eof for /f %%i in ('dir /ad /b "%root%v*"') do ( set "path=%root%%%i;!path!" ) for %%i in (csc.exe) do ( if exist "%%~$PATH:i" set "csc=%%~$PATH:i" ) set out="%tmp%\app.exe" set pdb="%tmp%\app.pdb" set "arg=/nologo /t:exe /out:%out% /optimize+" set "arg=%arg% /debug:pdbonly /define:CODE_ANALYSIS" %csc% %arg% "%~f0" %out% "%~1" "%~2" del /f /q %out% %pdb% endlocal exit /b */ using System; using System.IO; using System.Text; using System.Reflection; using System.Diagnostics; using System.Globalization; using System.Text.RegularExpressions; internal sealed class Program { static void Clear() { Console.CursorTop = Console.CursorTop - 1; Console.Write(new String(' ', Console.BufferWidth)); Console.CursorTop = Console.CursorTop - 2; } static void PrintUsage() { Console.WriteLine("Usage: {0} <directory> <log>", typeof(Program).Assembly.GetName().Name ); } static void Main(String[] args) { if (args.Length != 2) { PrintUsage(); return; } Clear(); String[] files; StringBuilder sb = new StringBuilder(); try { files = Directory.GetFiles(args[0], "*.exe"); foreach (String file in files) { Char c; FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(file); switch (fvi.FileDescription.Split(new Char[] {' '})[0]) { case "Update": c = '1'; break; case "Definition": c = '2'; break; case "Security": c = '3'; break; default: c = 'x'; break; } sb.Append( String.Format(CultureInfo.InvariantCulture, "{0}-{1}\n", new Regex(@"(?i:kb\d+)").Match(file).Value, c )); } File.WriteAllText(args[1], sb.ToString()); } catch (Exception e) { Console.WriteLine(e.Message); } } } Цитата Iska:
|
||
Последний раз редактировалось greg zakharov, 14-01-2017 в 23:28. Отправлено: 20:22, 14-01-2017 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата greg zakharov:
|
|
Отправлено: 20:48, 14-01-2017 | #6 |
Забанен Сообщения: 793
|
|
Отправлено: 20:58, 14-01-2017 | #7 |
Ветеран Сообщения: 2205
|
Профиль | Отправить PM | Цитировать greg zakharov, видимо не за тот хвост дёрнул, "му" не получилось...
Убрал проверки, напрямую прописал путь к обновлениям и файлу лога, батник в 866 кодировке (в пути есть кириллица и избавляться от неё не хотелось-бы). Где взять файлы app.exe, app.pdb? os - Win7x32 код
/* 2>nul @echo off setlocal enabledelayedexpansion set "key=HKLM\SOFTWARE\Microsoft\.NETFramework" for /f "tokens=3" %%i in ( '2^>nul reg query %key% /v InstallRoot' ) do set "root=%%i" for /f %%i in ('dir /ad /b "%root%v*"') do ( set "path=%root%%%i;!path!" ) for %%i in (csc.exe) do ( if exist "%%~$PATH:i" set "csc=%%~$PATH:i" ) set out="%tmp%\app.exe" set pbd="%tmp%\app.pdb" set "arg=/nologo /t:exe /out:%out% /optimize+" set "arg=%arg% /debug:pdbonly /define:CODE_ANALYSIS" %csc% %arg% "%~f0" %out% "d:\Декомпрессор\Updates" "d:\Декомпрессор\log.txt" del /f /q %out% %pdb% endlocal pause exit /b */ using System; using System.IO; using System.Reflection; using System.Diagnostics; using System.Globalization; using System.Text.RegularExpressions; internal sealed class Program { static void Clear() { Console.CursorTop = Console.CursorTop - 1; Console.Write(new String(' ', Console.BufferWidth)); Console.CursorTop = Console.CursorTop - 2; } static void PrintUsage() { Console.WriteLine("Usage: {0} <directory> <log>", typeof(Program).Assembly.GetName().Name ); } static void Main(String[] args) { if (args.Length != 2) { PrintUsage(); return; } Clear(); String[] files; StringBuilder sb = new StringBuilder(); try { files = Directory.GetFiles(args[0], "*.exe"); foreach (String file in files) { Char c; FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(file); switch (fvi.FileDescription.Split(new Char[] {' '})[0]) { case "Update": c = '1'; break; case "Definition": c = '2'; break; case "Security": c = '3'; break; default: c = 'x'; break; } sb.Append( String.Format(CultureInfo.InvariantCulture, "{0}-{1}\n", new Regex(@"(?i:kb\d+)").Match(file).Value, c )); } File.WriteAllText(args[1], sb.ToString()); } catch (Exception e) { Console.WriteLine(e.Message); } } } ошибка
d:\Декомпрессор>/* 2>nul 1.cmd(54,5): error CS0246: Не удалось найти имя типа или пространства имен "StringBuilder" (пропущена директива using или ссылка на сборку?) 1.cmd(54,28): error CS0246: Не удалось найти имя типа или пространства имен "StringBuilder" (пропущена директива using или ссылка на сборку?) ""c:\Windows\Temp\app.exe"" не является внутренней или внешней командой, исполняемой программой или пакетным файлом. Не удается найти c:\Windows\Temp\app.exe Для продолжения нажмите любую клавишу . . . |
Последний раз редактировалось sov44, 14-01-2017 в 22:25. Отправлено: 22:00, 14-01-2017 | #8 |
Забанен Сообщения: 793
|
sov44, app.exe и app.pdb генерируются из C# кода в представлении бата как такового, то есть бат "скармливает" копилятору csc.exe себя как исходник программы на C#, а тот создает сборку во временной папке с именем app.exe (генериацию .PDB можно в принципе отключить, удалив определенные параметры компиляции кода); после того, как app.exe отрабатывает, бат его удаляет. В 32-битной Win7 все и писалось, так что должно работать при условии, что имеются права на запись во временную папку пользователя, а вот спойлеры у на этом форуме не открываются (косяк браузера), так что ошибку посмотреть не могу.
P.S., в коде допустил опечатку: Должно быть: |
Отправлено: 22:29, 14-01-2017 | #9 |
Ветеран Сообщения: 2205
|
Профиль | Отправить PM | Цитировать greg zakharov, исправил опечатку, всё равно ошибка
Цитата:
|
|
Отправлено: 22:52, 14-01-2017 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Как добавить в текстовый файл строку с именем самого файла | bodun123 | Скриптовые языки администрирования Windows | 12 | 09-07-2014 10:00 | |
VBS/WSH/JS - [решено] Добавление параметра в текстовый файл равный названию файла | XXXp | Скриптовые языки администрирования Windows | 14 | 31-03-2012 23:56 | |
CMD/BAT - [решено] Вставить имя файла в текстовый файл (UTF-8 without BOM) | Jahnhoy | Скриптовые языки администрирования Windows | 11 | 19-09-2011 17:39 | |
CMD/BAT - [решено] как из bat файла дописать символ в текстовый файл? | idzs | Скриптовые языки администрирования Windows | 6 | 22-02-2011 03:49 | |
CMD/BAT - [решено] Пакетный файл для выборки из спика файлов текстовый(название и описание) | Скуб | Скриптовые языки администрирования Windows | 7 | 18-05-2010 15:17 |
|