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

Я помещаю превосходный ответ JLBorges на аналогичный вопрос дословно из cplusplus.com, так как это наиболее краткое объяснение, которое я прочитал по этому вопросу.

] В шаблоне, который мы пишем, есть два типа имен, которые можно использовать - зависимые имена и не зависимые имена. Зависимое имя - это имя, которое зависит от параметра шаблона; неизменяемое имя имеет то же значение, независимо от параметров шаблона.

Например:

template< typename T > void foo( T& x, std::string str, int count )
{
    // these names are looked up during the second phase
    // when foo is instantiated and the type T is known
    x.size(); // dependant name (non-type)
    T::instance_count ; // dependant name (non-type)
    typename T::iterator i ; // dependant name (type)

    // during the first phase, 
    // T::instance_count is treated as a non-type (this is the default)
    // the typename keyword specifies that T::iterator is to be treated as a type.

    // these names are looked up during the first phase
    std::string::size_type s ; // non-dependant name (type)
    std::string::npos ; // non-dependant name (non-type)
    str.empty() ; // non-dependant name (non-type)
    count ; // non-dependant name (non-type)
}

То, что зависит от зависимого имени, может быть чем-то другим для каждого конкретного экземпляра шаблона. Как следствие, шаблоны C ++ подвержены «двухфазному поиску имен». Когда шаблон сначала анализируется (до того, как выполняется какое-либо создание), компилятор просматривает не зависящие имена. Когда происходит конкретное создание шаблона, параметры шаблона известны к тому времени, и компилятор ищет зависимые имена.

На первом этапе анализатор должен знать, является ли зависимое имя именем типа или имени не-типа. По умолчанию зависимым именем считается имя не-типа.

Использовать ключевое слово typename только в объявлениях шаблонов и определениях, приведенных ниже.

blockquote>

у вас есть квалифицированное имя, которое относится к типу и зависит от параметра шаблона.

226
задан Matthew Murdoch 24 March 2010 в 04:12
поделиться

6 ответов

Сообщения ниже помогшего значительно, но не сделал то, что я заявил в своем вопросе, где я должен был обработать всю строку в целом. Вот то, что я нашел для работы.

for /F "tokens=*" %%A in (myfile.txt) do [process] %%A

маркерное ключевое слово со звездочкой (*) вытянет весь текст для всей строки. Если Вы не вставите звездочку, то она только наденет первое слово на строку. Я предполагаю, что это имеет отношение к пробелам.

Для Команды на TechNet

я ценю все сообщения!

<час>

, Если существуют пробелы в Вашем пути к файлу, необходимо использовать usebackq. Например.

for /F "usebackq tokens=*" %%A in ("my file.txt") do [process] %%A
282
ответ дан Dan 23 November 2019 в 03:52
поделиться

Из ссылки командной строки Windows:

Для парсинга файла, игнорируя прокомментированные строки, введите:

for /F "eol=; tokens=2,3* delims=," %i in (myfile.txt) do @echo %i %j %k

Эта команда анализирует каждую строку в Myfile.txt, игнорируя строки, которые начинаются с точки с запятой, и передача второго и третьего маркера от каждой строки до ДЛЯ тела (маркеры разграничены запятыми или пробелами). Тело ссылок оператора FOR %i, чтобы заставить второй маркер, %j заставлять третий маркер и %k получать все остающиеся маркеры.

, Если имена файлов, которые Вы предоставляете, содержат пробелы, используйте кавычки вокруг текста (например, "Имя файла"). Для использования кавычек необходимо использовать usebackq. Иначе кавычки интерпретируются как определение литеральной строки для парсинга.

Между прочим, можно найти справочный файл командной строки в большинстве систем Windows в:

 "C:\WINDOWS\Help\ntcmds.chm"
54
ответ дан Ash 23 November 2019 в 03:52
поделиться

Вот bat-файл, который я записал для выполнения всех сценариев SQL в папке:

REM ******************************************************************
REM Runs all *.sql scripts sorted by filename in the current folder.
REM To use integrated auth change -U <user> -P <password> to -E
REM ******************************************************************

dir /B /O:n *.sql > RunSqlScripts.tmp
for /F %%A in (RunSqlScripts.tmp) do osql -S (local) -d DEFAULT_DATABASE_NAME -U USERNAME_GOES_HERE -P PASSWORD_GOES_HERE -i %%A
del RunSqlScripts.tmp
9
ответ дан 23 November 2019 в 03:52
поделиться

Если у Вас есть Windows NT-семьи (один с cmd.exe как оболочка), попробуйте ЗА/F команду .

5
ответ дан Michael Ratanapintha 23 November 2019 в 03:52
поделиться

Или вы можете исключить параметры в кавычках:

FOR /F %%i IN (myfile.txt) DO ECHO %%i
14
ответ дан 23 November 2019 в 03:52
поделиться

В пакетном файле вы ДОЛЖНЫ использовать %% вместо % : ( Введите help для )

for /F "tokens=1,2,3" %%i in (myfile.txt) do call :process %%i %%j %%k
goto thenextstep
:process
set VAR1=%1
set VAR2=%2
set VAR3=%3
COMMANDS TO PROCESS INFORMATION
goto :EOF

. Что это значит: "do call: process %% i %% j %% k" в конце команды for передает информацию, полученную в команду for из myfile.txt в подпрограмму «процесса».

Когда вы используете команду for в пакетной программе, вам нужно использовать двойные знаки% для переменных.

Следующие строки передают эти переменные из команды for в подпрограмму процесса и позволяют обрабатывать эту информацию.

set VAR1=%1
 set VAR2=%2
 set VAR3=%3

У меня есть несколько довольно продвинутых применений этой точной настройки, которыми я готов поделиться, если потребуются дополнительные примеры. Разумеется, добавьте EOL или Delims по мере необходимости.

31
ответ дан 23 November 2019 в 03:52
поделиться