Пакет для Loop Escape Asterisk - PullRequest
       11

Пакет для Loop Escape Asterisk

1 голос
/ 23 сентября 2011

Я пытаюсь создать пакет для цикла (Windows XP и более новые командные запросы), который повторяет строку, содержащую одну или несколько звездочек.Как я могу это сделать?Вот пример:

@FOR %%A IN (A* B) DO @ECHO %%A

Ожидаемый результат (что я пытаюсь получить) следующий:

A*  
B

Однако, что я на самом деле получаю с помощью команды выше, так этоB и только B. По какой-то причине все, что помечено звездочкой, игнорируется циклом.Я попытался избежать звездочки с 1-4 символами (^), обратными слешами (\), знаками процента (%) и другими звездочками (*), но все безрезультатно.Заранее благодарим за освещение.

В СЛУЧАЕ ВЫ ХОТИТЕ БОЛЬШЕ ИНФОРМАЦИИ:

Цель этого - разобрать путь из списка разделенных пробелами частичных путей.Например, я хочу скопировать C: \ Bar \ A.txt, C: \ Bar \ B.txt и C: \ Bar \ C * .txt в C: \ Foo \, используя следующий подход:

@SET FILE_LIST=A B C*  
@FOR %%A IN (%FILE_LIST%) DO @COPY C:\Bar\%%A.txt C:\Foo\

Если есть другой альтернативный способ сделать это (желательно без ввода каждой команды копирования, поскольку существует ~ 200 файлов, по той же причине, по которой я не хочу хранить полный путь для каждого файла),Буду признателен за помощь.Еще раз спасибо,

-Джефф

Ответы [ 2 ]

2 голосов
/ 23 сентября 2011

звездочки работают так, как задумано, в вашем случае

@FOR %%A IN (A* B) DO @ECHO %%A

расширяет A * до всех файлов, которые начинаются с A.

Возможный способ сделать то, что вы хотите, просто использовать это расширение

@ECHO off
PUSHD C:\bar
SET FILE_LIST=A.txt B.txt C*.txt
FOR %%A IN (%FILE_LIST%) DO (
  IF EXIST %%A COPY %%A C:\Foo\
)
POPD
1 голос
/ 14 августа 2012

Это может помочь:

@echo off
set "it=a*b .txt-b*.txt-c*.txt-d.txt"
set /a i=0,fn=3
:startLoop
set /a i=i+1
for /f "tokens=%i%delims=-" %%m in ("%it%") do echo %%m
if %i% lss %fn% goto:startLoop
...