2

Я пытался в течение 2 дней заставить работать поверхностно простой скрипт:

for /F "eol=*" %%A in  (c:/users/SCTMP000/server.txt) do (echo %%A)

Это само по себе сокращение моего желаемого кода, который я намеревался прокрутить вышеупомянутым текстовым файлом, который является просто списком доменов, чтобы выполнить команду PING / TRACERT каждого домена и направить вывод в другой текстовый файл. Но даже этот простой однострочный файл не будет обрабатывать файл.

Я видел бесчисленные вариации вышеупомянутого, приведенные в MSDN, StackOverflow, на этом сайте и во многих личных блогах разработчиков, поэтому чувствую, что я нахожусь в подходящем месте, но мой не будет работать! В зависимости от того, как я отображаю имя файла и его путь (-ie без кавычек, заключенный в одинарные кавычки, заключенный в двойные кавычки), я вижу:

[quoteless] - ничего: нет активности открытия файлов и, следовательно, нет ECHO на строку

[в двойных кавычках] - полное имя пути ECHOed, т.е. c:/users/SCTMP000/server.txt

[одиночные кавычки] - весь файл фактически открывается в блокноте !!

Таким образом, путь является правильным, но ни сценарий, выполняемый как пакетный файл, ни команда, выполняемая в интерактивном режиме, похоже, не способны фактически открыть текстовый файл и прокрутить его. Также обратите внимание, что я попробовал несколько вариантов строки: DELIMS, TOKENS, EOL и т.д., Но безуспешно.

Что я делаю неправильно ? Заранее спасибо.

1 ответ1

1

Мне удалось заставить это работать с объясненными результатами, используя образец файла списка с именами доменов, которые я поместил в список. Я просто использовал FOR /F "USEBACKQ TOKENS=*" %%A IN ("filelist") .

Я пытаюсь использовать USEBACKQ и TOKENS=* в циклах FOR /F, которые читают из списка файлов по причинам, которые я перечислил ниже в разделе « Объяснение логики сценария », поэтому прочитайте его и проверьте для подтверждения.


Пример рабочей партии

FOR /F "USEBACKQ TOKENS=*" %%A IN ("c:\users\SCTMP000\server.txt") DO (ECHO %%~A)

Логика скрипта объяснена

  • Опция USEBACKQ используемая в цикле FOR , гарантирует, что список файлов по-прежнему будет читаться, если в имени списка файлов или в его пути есть пробелы, и вам необходимо заключить в кавычки путь к списку файлов.

    • Например, SET FileList=C:\Folder Name\File List.txt
      • Без USEBACKQ цикл FOR в таком случае выдает ошибку
  • Опция TOKENS=* используемая в цикле FOR , гарантирует, что все значение будет возвращено при чтении из списка файлов, даже если в этом значении есть пробел, хотя это не должно применяться к доменам, поэтому вы должны использовать Это

    • Например, список файлов имеет значение "test my file.txt" поэтому в строке есть пробел

      • Без TOKENS=* цикл FOR будет возвращать только часть значения этой строки перед первым пробелом, а не значение, как ожидалось (т. Е. "test")

Использование этих параметров, даже когда они не нужны, похоже, не приносит никакого вреда, и если вы когда-нибудь добавите такое значение или переменную в набор сценариев, он уже сможет соответственно обрабатывать такие случаи.


Дополнительные ресурсы

  • FOR /F
  • Устранение неполадок задач планировщика задач
  • FOR /?

        tokens=x,y,m-n  - specifies which tokens from each line are to
                          be passed to the for body for each iteration.
                          This will cause additional variable names to
                          be allocated.  The m-n form is a range,
                          specifying the mth through the nth tokens.  If
                          the last character in the tokens= string is an
                          asterisk, then an additional variable is
                          allocated and receives the remaining text on
                          the line after the last token parsed.
        usebackq        - specifies that the new semantics are in force,
                          where a back quoted string is executed as a
                          command and a single quoted string is a
                          literal string command and allows the use of
                          double quotes to quote file names in
                          file-set.
    

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .