1

Тема: CMD/BAT: Cкрипт для сортировки файлов

Всем привет!

ОЧ. нужна Ваша помощь! ... в написании (исправлении) скрипта!

Суть - скрипт должен копировать файлы из папки IN (которые  там постоянно появляются) в папки OUT и ARC таким образом:

- если файл в папке IN подписан двумя и более электронными подписями (ЭП) - то он копируется в папку OUT и в ARC, если количество ЭП меньше 2-х то файл копируется только в ARC. После успешного копирования файл из папки IN – удаляется. Количество подписей под файлом можно определить по результату работы программы - (sign.exe /s «путь\имя файла» >test.txt). В созданном текстовом файле (test.txt) число ЭП будет в шестой строчке пятым словом - проверял.. - для одного файла (не в цикле)- все работает.

Написал скрипт для обработки любых файлов из каталога (In), но в цикле (for do) он перестал работать - НЕ ПРОИСХОДИТ ПОДСТАНОВКА НОВЫХ ЗНАЧЕНИЙ ДЛЯ ПЕРЕМЕННОЙ "colep" из файла "test.txt".

Интуитивно, догадываюсь что решение в использовании - "setlocal enabledelayedexpansion" - отложенного раскрытия переменной !colep! , но не знаю как это добавить в скрипт.  Помогите! ... или подскажите альтернативный вариант решения этой задачи.
Буду благодарен, Всем кто откликнется!

@echo off
for %%I in (in\*.*) do (sign.exe /s %%I >test.txt 
for /f  "skip=5 tokens=5" %%k in (test.txt) do (set colep=%%k)
if  %colep% GEQ 2 (
    copy "In\%%~nxI" "OUT\%%~nxI"
         @echo %time:~0,8% %date:~3,10% -- %%~nxI --- ЭП %colep% OUT >>log.log
        )
    copy "In\%%~nxI" "ARC\%%~nxI"
    if exist "ARC\%%~nxI" (
         @echo %time:~0,8% %date:~3,10% -- %%~nxI --- ЭП %colep% ARC >>log.log
         del /Q "In\%%~nxI"
    )
)

2

Re: CMD/BAT: Cкрипт для сортировки файлов

А попробуйте не создавать временный файл, а сразу разбирать вторым FOR-ом вывод программы sign.exe. (кстати, второй цикл ведь разбирает не только 6-тую строку, но и все последующие...)


for %%I in (in\*.*) do (
rem sign.exe /s %%I >test.txt 
rem for /f  "skip=5 tokens=5" %%k in (test.txt) do (set colep=%%k)
for /f "skip=5 tokens=5" %%k in ('sign.exe /s %%I') do (set colep=%%k)
... )
WBR. Roman

3 (изменено: Bumble_Bee, 2012-11-06 15:41:30)

Re: CMD/BAT: Cкрипт для сортировки файлов

@echo off
for %%S in (in\*.*) do (
FOR /F "skip=5 tokens=5" %%i IN ('sign.exe /s "%%S"') DO (
rem @echo "%%S" "COP=%%i"
if %%i GEQ 2 (
    copy "In\%%~nxS" "OUT\%%~nxS"
         @echo %time:~0,8% %date:~3,10% -- %%~nxS --- ЭП %%i OUT >>log.log
        )
    copy "In\%%~nxS" "ARC\%%~nxS"
    if exist "ARC\%%~nxS" (
         @echo %time:~0,8% %date:~3,10% -- %%~nxS --- ЭП %%i ARC >>log.log
         del /Q "In\%%~nxS"
    )
)
)
pause