Как извлечь имена файлов типа .qvd из каталога и установить его в переменной один за другим с помощью командной строки Windows? - PullRequest
0 голосов
/ 12 мая 2018

У меня есть несколько файлов типа .qvd в каталоге.Поэтому я хочу извлечь имена файлов (без расширения) по одному из всех файлов типа .qvd и отправить это значение переменной в качестве параметра в другой пакетный файл.

Итак, в первом циклепеременная будет иметь первое имя файла, а функция CALL вызовет другой пакет и передаст первое имя файла в переменной.Аналогичным образом цикл будет продолжаться до тех пор, пока не будет выбрано последнее имя файла типа * 1005.

Я использую командную строку, чтобы написать его, как показано ниже:

@ECHO OFF
setlocal enabledelayedexpansion
for %f in (E:\QVD_to_CSV\QVDs\*.qvd) do (
    CALL CSV_Gene.bat %~nf E:\QVD_to_CSV\QVDs E:\QVD_to_CSV\CSVs
)

Но это не 'выполнить и просто закрыть при запуске этого пакета.

1 Ответ

0 голосов
/ 12 мая 2018

Справка команды FOR выводится при запуске в открытом окне командной строки for /?.
Вывод справки на нескольких страницах объясняется на первой странице:

Чтобы использовать команду FOR в пакетной программе, укажите вместо переменной %%
переменной%.Имена переменных чувствительны к регистру, поэтому% i отличается от% I.

И справка по выводу содержит также:

Кроме того, была заменена ссылка на переменную FOR.расширенный.
Теперь вы можете использовать следующий необязательный синтаксис:

%~I         - expands %I removing any surrounding quotes (")
    %~fI        - expands %I to a fully qualified path name
    %~dI        - expands %I to a drive letter only
    %~pI        - expands %I to a path only
    %~nI        - expands %I to a file name only
    %~xI        - expands %I to a file extension only
    %~sI        - expanded path contains short names only
    %~aI        - expands %I to file attributes of file
    %~tI        - expands %I to date/time of file
    %~zI        - expands %I to size of file
    %~$PATH:I   - searches the directories listed in the PATH
                   environment variable and expands %I to the
                   fully qualified name of the first one found.
                   If the environment variable name is not
                   defined or the file is not found by the
                   search, then this modifier expands to the
                   empty string

Таким образом, командная строка, используемая непосредственно в окне командной строки для этой задачи:

for %I in (E:\QVD_to_CSV\QVDs\*.qvd) do @call CSV_Gene.bat "%~nI" E:\QVD_to_CSV\QVDs E:\QVD_to_CSV\CSVs

И та же самая командная строка в пакетном файле:

@echo off
for %%I in (E:\QVD_to_CSV\QVDs\*.qvd) do call CSV_Gene.bat "%%~nI" E:\QVD_to_CSV\QVDs E:\QVD_to_CSV\CSVs

Имя файла, содержащее пробел или один из этих символов &()[]{}^=;!'+,`~ необходимо заключить в двойные кавычки, что является причиной использования "%~nI"соответственно "%%~nI".

Нет необходимости в отложенном расширении переменной среды для этой задачи.По этой причине этот специальный режим не используется для более быстрого выполнения пакетных файлов и обрабатывает также имена файлов с одним или несколькими восклицательными знаками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...