Установка поля, как уже обсуждено, проблематична. Вы банка можете (в 3,5) отдельный метод, такой как метод set свойства - но только косвенно. Это становится намного легче в 4,0, как обсуждено здесь . Однако, если у Вас на самом деле есть свойства (не поля), можно сделать много просто с Delegate.CreateDelegate
:
using System;
using System.Reflection;
public class Foo
{
public int Bar { get; set; }
}
static class Program
{
static void Main()
{
MethodInfo method = typeof(Foo).GetProperty("Bar").GetSetMethod();
Action setter = (Action)
Delegate.CreateDelegate(typeof(Action), method);
Foo foo = new Foo();
setter(foo, 12);
Console.WriteLine(foo.Bar);
}
}
Если вы работаете с современными окнами, вы не ограничены командами cmd.exe изначально, вы можете использовать vbscript. Если ваша политика также не предусматривает использования vbscript, то, думаю, вам следует уволить свое руководство :)
Set objFS=CreateObject("Scripting.FileSystemObject")
strFile = "c:\test\file"
Set objFile = objFS.OpenTextFile(strFile)
strFirstLine = objFile.ReadLine
Do Until objFile.AtEndOfStream
strLine= objFile.ReadLine
var1 = Mid(strLine,10) ' do substring from position 10 onwards
' var2 = Mid (strLine,<pos>,<length>) ' get next offset and save to var2
WScript.Echo var1 & var2 ' print them out.
Loop
В основном, чтобы «вырезать» символы строки, вы используете функцию Mid (). пожалуйста, посмотрите документацию vbscript , чтобы узнать больше.
Сохраните вышеуказанное как test.vbs и в командной строке выполните
c:\test> cscript /nologo test.vbs > newfile
Конечно, "подстрока" также может быть выполнена с помощью чистого cmd.exe, но я оставлю это другим, чтобы они помогли вам.
Обновление от Pax: На основе этого ответа я придумал следующее, которое будет хорошим началом:
option explicit
dim objFs, objFile, strLine, value1, value2
if wscript.arguments.count < 1 then
wscript.echo "Usage: process <input-file>"
wscript.quit
end if
set objFs=createObject("Scripting.FileSystemObject")
set objFile = objFs.openTextFile(wscript.arguments.item(0))
do until objFile.atEndOfStream
strLine= objFile.readLine
value1 = trim(mid(strLine, 8, 10))
value2 = trim(mid(strLine, 23, 4))
if right(value1,1) = "-" then value1 = "-" & left(value1,len(value1)-1)
if right(value1,1) = "+" then value1 = left(value1,len(value1)-1)
if left(value1,1) = "+" then value1 = mid(value1,2)
wscript.echo value1 & "," & value2
loop
Это соответствует всем требования у нас были. Позже мы можем преобразовать смещения и длины в аргументы командной строки.
Конец обновления.
На этом сайте есть несколько указателей о том, как извлекать подстроки в cmd.exe: http://www.dostips.com/DtTipsStringManipulation.php
Этот сайт предлагает что вы можете использовать
%varname:~2,3%
для индексации переменной. Кажется, это удовлетворяет ваши потребности, за исключением того, что теперь вам нужно преобразовать каждую строку в переменную.
Затем вам нужно взглянуть на ужасный синтаксис цикла for
и if
и ветвление ( вы можете перейти к : метки
в пакете).
Все это довольно уродливо, но если вам действительно нужно туда пойти ...
Вот страница в SO, посвященная циклическому просмотру файлов и выполнению с ними чего-либо: Как вы просматриваете каждую строку в текстовом файле с помощью командного файла Windows?