Можно ли использовать пакетный файл для чтения строки, а затем использовать только подстроку этой строки для выполнения команды?

Я работаю с ClearCase, и я хотел бы использовать пакетный скрипт для запуска текстового файла, созданного с помощью команд cleartool, скопировать файл, указанный в строке, но затем выполнить переименование, только извлекая подстроку до указанного набора символов .

Пример текстового файла:

"M:\LEVEL1\PROJECT\src\ROOT\file 2.txt@@\main\LEVEL1\5"
"M:\LEVEL1\PROJECT\src\ROOT\file 1.txt@@\main\LEVEL1\3"
"M:\LEVEL1\PROJECT\src\ROOT\folder 1\file 5.txt@@\main\LEVEL1\2"
"M:\LEVEL1\PROJECT\src\ROOT\file 4.txt@@\main\LEVEL1\3"
"M:\LEVEL1\PROJECT\src\ROOT\file 7.txt@@\main\LEVEL1\2"

Что я хотел бы сделать, так это создать команду, которая выглядит так (используя первую строку):

xcopy "M:\LEVEL1\PROJECT\src\ROOT\file 2.txt@@\main\LEVEL1\5" "<output folder>\LEVEL1\PROJECT\src\ROOT\file 2.txt"

где <output folder> — это папка, которая указывается в качестве параметра при запуске скрипта. Итак, в основном я прошу извлекать только то, что находится между M: и @@ в каждой строке по мере ее чтения, чтобы я мог использовать это в команде копирования.

У меня уже есть xcopy "%%~fA" "%OUTPUTDIR:"=%\%%~pnxA", который копирует строку в выходной каталог, но %%~pnxA удалит только букву диска, а не оставшуюся часть строки, начиная с @@.

Это возможно?


person Andrew    schedule 28.01.2013    source источник
comment
Вы пробовали что-то подобное? for /F "tokens=1,2,3 delims=:@" %%A in (in.txt) do echo xcopy %%A:%%B@@%%C DIR:%%B   -  person JJRhythm    schedule 28.01.2013
comment
МАГИЯ! спасибо большое, это гениально! понятия не имею, как работает логика.   -  person Andrew    schedule 28.01.2013


Ответы (1)


Просто разбивая ответ JJRythms на объяснение.

for /F "tokens=1,2,3 delims=:@" %%A in (in.txt) do xcopy %%A:%%B@@%%C DIR:%%B

Цель этого оператора — проанализировать строки в файле in.txt, а затем использовать нужные нам фрагменты.

  • for — команда цикла.
  • /F - параметр Тип цикла разбора файла.
  • tokens=1,2,3 — подстроки, из которых извлекаются на основе разделителей строк.
  • delims=:@ - разделители, разделяющие токены. (по умолчанию пробелы)
  • %%A - переменная начального цикла. (Токен 1 = %%A, Токен 2 = %%B, Токен 3 = %%C)
  • in (in.txt) файл, в котором выполняется команда цикла.
  • do - команды для каждой строки файла.

Пример Использование первой строки.

"M:\LEVEL1\PROJECT\src\ROOT\file 2.txt@@\main\LEVEL1\5"

Разбирается как:

%%A = "M
%%B = \LEVEL1\PROJECT\src\ROOT\file 2.txt
%%C = \main\LEVEL1\5"

Разделители потребляются и, следовательно, удаляются из результирующих переменных.

Обратите внимание, что это решение не будет работать, если где-либо еще в имени файла есть знаки @.

Введите for /? в командной строке для получения справки и параметров.

person David Ruhmann    schedule 28.01.2013