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
Для продолжения нажмите любую клавишу . . .