все, я новичок с небольшими знаниями о скриптах. Я сделал этот .bat, который отлично работает:
for /l %%x in (1, 1, 4) do (
echo %%x
type A%%x.xml + tail.xml >> v%%x.stage
)
Он выполняет цикл 4 раза, объединяя файлы xml внутри папки. .Bat находится в той же папке, что и XML для слияния.
Но мне нужно вручную отредактировать число 4, если я хочу выполнить цикл из 10. Есть ли способ сделать цикл, используя количество файлов в папке? Допустим, в папке 15 файлов .xml, поэтому цикл будет выполняться 15 раз. Я пробовал разные коды циклов, которые нашел при переполнении стека, но мне не удалось заставить их работать :( не могли бы вы мне помочь, пожалуйста?
огромное спасибо
ОБНОВИТЬ: спасибо @Squashman, так что теперь мой код должен быть примерно таким, верно?
for %%x IN (*.xml) do set /a count+=1
echo %%x
type A%%x.xml + tail.xml >> v%%x.stage
@Squashman, я обновил сообщение небольшим количеством кода, вы можете мне помочь, пожалуйста?
Используйте команду FOR
, которую я дал вам над командой FOR
. Затем используйте переменную окружения %count%
, где в вашем коде находится 4
.
он работает ОТЛИЧНО, спасибо @Squashman: D
Если в каталоге есть файлы 15
.xml
, должны быть только петли 14
, потому что tail.xml
будет одним из них, и я достаточно уверен, что вы не захотите объединять его с самим собой.
@Compo Спасибо, да, вы правы, на самом деле, я вручную удаляю лишний файл (не большое дело ..), какое редактирование вы предлагаете, чтобы выполнить цикл только 14 раз?
Если диапазон чисел гарантированно непрерывен, Предложение Сквошмена сработает.
Чтобы получить максимальное число независимо от возможных пробелов, вы можете использовать:
:: Q:\Test\2018\12\18\SO_53837368.cmd
@Echo off&SetLocal EnableDelayedExpansion
set "Max=0"
For /f "delims=a." %%A in ('Dir /B "a*.xml"') do (
Set /A "Num=%%A"
if !Num! gtr !Max! set "Max=!Num!"
)
Echo Max number is: %Max%
он разделяет имя файла между буквой a и точкой в расширении, сохраняя единственный номер. Набор / A используется для исключения возможных несовпадений с ненулевыми значениями.
спасибо @LotPings, сейчас мой диапазон файлов непрерывен, но в случае разных файлов я буду помнить ваш код: D
Я думаю, что теоретически вы могли бы использовать свой код и использовать !num!
как часть команды копирования. copy A!num!.xml + tail.xml >> v!num!.stage
. Проблема в том, что мы не знаем всей специфики всего процесса, поэтому трудно дать конкретный пуленепробиваемый ответ.
for %%G IN (*.xml) do set /a count+=1