2016-05-02 7 views
2

Я пытаюсь создать простой пакетный файл, чтобы сделать 7zip-архивы из всех файлов в его каталоге.batch for increment value ENABLEDELAYEDEXPANSION

Я хочу 7zip-архивы, чтобы получить имена, как a01.7z, a02.7z, a03.7z ...

Видимо приращением значения в пакетном для-петли ISN Легко.

SETLOCAL решение ENABLEDELAYEDEXPANSION не работает на моем компьютере (окна 10, 64-разрядная версия)

Кто-то предложил поставить инкремента-код в подпрограмме:

set /a counter=0 
for %%i in (*.*) do (
    call :pass2 
    goto :cont 
    :pass2 
     set /a counter=%counter%+1 
     goto :EOF 
    :cont 
     "c:\Program Files\7-Zip\7z.exe" a a%counter% "%%i" 
) 

Это не работает потому что почему-то DOS больше не понимает окончательный «%% i» и просто выводит «% i».

Пожалуйста, научите меня, как сделать цикл в партии с помощью счетчика.

+0

EnabledDelayedExpansion включается другой режим. Задержанными переменными являются '! Var!', Который является именем юридической переменной, если отложенное расширение выключено (нормальное состояние). См. 'Set /?' Для справки и объяснения. Обратите внимание, что вы обычно ссылаетесь на переменные '% var%', если вы специально не хотите, чтобы они были расширены во время выполнения. Причина, по которой у вас возникла проблема, - это ваш код в скобках, то есть все эти строки рассматриваются как одна строка. Поэтому переменное расширение происходит, когда этот блок строк читается. –

+0

Ваша подпрограмма неправильная. 1/В скобках 2/Вы передаете '%% I' в качестве параметра подпрограммы, подпрограмма обращается к ней через'% 1'. См. 'Call /?'. 3/Вы помещаете 'Goto: eof' в конце суб. Тогда ваша основная программа затем должна перепрыгнуть через нее (или завершить через 'goto: eof'). См. 'Goto /?'. –

+0

Спасибо, миллион за то, что научил меня вещам! – Hakkelaar

ответ

2

Это самый простой способ создания двух цифр номера, с левым нулем:

@echo off 
setlocal EnableDelayedExpansion 

set /A counter=100 
for %%i in (*.*) do (
    set /A counter+=1 
    "c:\Program Files\7-Zip\7z.exe" a a!counter:~1! "%%i" 
) 
+0

Странно, setlocal EnableDelayedExpansion в этом коде работает на моем компьютере. Должно быть, я сделал опечатку. Очень креативен на двухзначном счетчике. Я предполагаю, что: ~ 1 отсекает первую цифру переменной. – Hakkelaar

0
setlocal enabledelayedexpansion 
set /a counter=0 
for %%i in (*.*) do (
     set /a counter=!counter!+1 
     @echo "c:\Program Files\7-Zip\7z.exe" a a!counter! "%%i" 
) 

Это добавляет 1 файл на почтовый индекс.

Смежные вопросы