Существует ли эквивалент для 'вырезания-c' в Windows cmd.exe?

Установка поля, как уже обсуждено, проблематична. Вы банка можете (в 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);
    }
}

10
задан jww 6 January 2019 в 00:00
поделиться

2 ответа

Если вы работаете с современными окнами, вы не ограничены командами 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

Это соответствует всем требования у нас были. Позже мы можем преобразовать смещения и длины в аргументы командной строки.

Конец обновления.

7
ответ дан 3 December 2019 в 22:00
поделиться

На этом сайте есть несколько указателей о том, как извлекать подстроки в cmd.exe: http://www.dostips.com/DtTipsStringManipulation.php

Этот сайт предлагает что вы можете использовать

%varname:~2,3%

для индексации переменной. Кажется, это удовлетворяет ваши потребности, за исключением того, что теперь вам нужно преобразовать каждую строку в переменную.

Затем вам нужно взглянуть на ужасный синтаксис цикла for и if и ветвление ( вы можете перейти к : метки в пакете).

Все это довольно уродливо, но если вам действительно нужно туда пойти ...

Вот страница в SO, посвященная циклическому просмотру файлов и выполнению с ними чего-либо: Как вы просматриваете каждую строку в текстовом файле с помощью командного файла Windows?

6
ответ дан 3 December 2019 в 22:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: