Попробуйте так:
Код:
![Выделить весь код](images/misc/selectcode.png)
@Echo Off
Set "Out=Q:\testbat\ps"
Set "Pre=PS*_2763_0020_"
Set "End=_*_2763_0020.xml"
Set "In=Q:\testbat\ps"
Set "MaskOther=*.xml"
Set "Dt=%date:~8,2%%date:~3,2%%date:~0,2%"
Call :Number "%Out%" "PSEI_2763_0020_" "%In%" "1 2 3 4 9" "Q:\testbat\ps\PSEI_Log.log"
Call :Number "%Out%" "PSKR_2763_0020_" "%In%" "5 6" "Q:\testbat\ps\PSKR_Log.log"
Call :Number "%Out%" "Other_" "%In%" "" "Q:\testbat\ps\Other_Log.log"
GoTo :Eof
:Number
Set "P_N=%~2"
Set "M_N=%~1\%P_N%%Dt%"
Set "NN=1000"
If Exist %5 FOR /F "usebackq tokens=1,2" %%i IN (%5) DO (
If %%i==%Dt% Set "NN=1%%j"
)
Set /A NN=%NN%+1
Set "LL=0"
If Not %4=="" (
FOR %%N IN (%~4) DO (
If Exist "%~3\%Pre%%%N%End%" (
Echo ARJ32.exe m -e "%M_N%%NN:~-3%.arj" "%~3\%Pre%%%N%End%"
Set "LL=1"
)
)
) Else (
If Exist "%~3\%MaskOther%" (
Echo ARJ32.exe m -e "%M_N%%NN:~-3%.arj" "%~3\%MaskOther%"
Set "LL=1"
)
)
If "%LL%"=="1" Echo %Dt% %NN:~-3%>%5
Опять я вставил для отладки перед arj Echo, которое при боевом применении надо убрать. И снова кусок, который я не тестировал, но который, я считаю, предпочтительнее того, что вверху
Код:
![Выделить весь код](images/misc/selectcode.png)
If Not %4=="" (
FOR %%N IN (%~4) DO (
If Exist "%~3\%Pre%%%N%End%" (
ARJ32.exe m -e "%M_N%%NN:~-3%.arj" "%~3\%Pre%%%N%End%"
)
)
) Else (
If Exist "%~3\%MaskOther%" (
ARJ32.exe m -e "%M_N%%NN:~-3%.arj" "%~3\%MaskOther%"
)
)
If Exist "%M_N%%NN:~-3%.arj" Echo %Dt% %NN:~-3%>%5
В вызове процедуры вместо "C:\testbat\ps\PSEI_Log.log" если лог файлы там же, куда создаются архивы, резонно написать, например, "%Out%\PSEI_Log.log". Вы вольны располагать лог-файлы где Вам нравится, лишь бы они не удалялись.
Кстати, в предыдущей задаче правильнее вместо
If Exist %In%\s*_*_*_%%N*.txt написать
If Exist "%~3\s*_*_*_%%N*.txt" так как %In% передаётся %3 аргументом