Имя: Пароль:
IT
Админ
Помогите с батником
,
0 БалбесВ1с
 
23.08.11
10:20
@Echo Off
echo %date% %time% ***Start***
SetLocal EnableDelayedExpansion
Set $SRC=list_add.txt
Set $EXC=list_excl.txt
Set $DST=D:\backups

Set $COMPR=1
Set $COPIES=7
C:\"Program Files"\7-Zip\7z.exe a -t7z -mhe=on "%$DST%\files%DATE:~-4%-%DATE:~3,2%-%DATE:~0,2%_%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%.7z" @%$SRC% -scsWIN  -mx=%$COMPR% -ssw -xr@%$EXC%
For /F "Delims=" %%i In ('DIR /B/O:-N %$DST%\files????-??-??_??-??-??.7z') Do (
Set /A $COPIES-=1
If !$COPIES! LSS 0 DEL "%$DST%\%%i"
)
echo %date% %time% ***End***

echo %date% %time% ***Start***
SetLocal EnableDelayedExpansion
Set $SRC=list_add2.txt
Set $EXC=list_excl2.txt
Set $DST=D:\backups2
Set $COMPR=1
Set $COPIES=7
C:\"Program Files"\7-Zip\7z.exe a -t7z -mhe=on "%$DST%\files%DATE:~-4%-%DATE:~3,2%-%DATE:~0,2%_%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%.7z" @%$SRC% -scsWIN  -mx=%$COMPR% -ssw -xr@%$EXC%
For /F "Delims=" %%i In ('DIR /B/O:-N %$DST%\files????-??-??_??-??-??.7z') Do (
Set /A $COPIES-=1
If !$COPIES! LSS 0 DEL "%$DST%\%%i"
)
echo %date% %time% ***End***
Этот батник копирует всё что указано в list_add.txt и list_add2.txt
А если таких list_add.txt будет больше? Как организовать цикл?
То есть чтоб для всех list_addN.txt исполнялось.
1 IVIuXa
 
23.08.11
10:25
2 БалбесВ1с
 
23.08.11
10:30
(1)Это не то,имхо.
3 IVIuXa
 
23.08.11
10:35
(2)
в смысле не то ???
делай цикл
или ты не знаешь как у тебя файлы будут называться ?
тоесть не list_add5.txt а jhdueud.txt - так что ли ?
4 БалбесВ1с
 
23.08.11
10:36
(3)Знаю.Не знаю сколько их будет.
5 IVIuXa
 
23.08.11
10:42
(4)
for %%i in ("каталог\*.txt") do echo %%i
6 IVIuXa
 
23.08.11
10:43
+(5) или так
for %%i in ("c:\mypapka\list_add*.txt") do echo %%i
7 БалбесВ1с
 
23.08.11
10:59
В каталоге с батником лежат файлы list_addNN.txt.Нужно чтобы скрипт выполнял копирование файлов которые в них указаны в папки D:\backupsNN.

Можно ли как-то сделать цикл до NN
и в
Set $SRC=list_addNN.txt
Set $EXC=list_exclNN.txt
Set $DST=D:\backupsNN подставлять NN ?
Пусть даже NN известно.Это неважно.При отсутствии файла например list_add7.txt он все равно ничего не делает.
8 smaharbA
 
23.08.11
12:00
setlocal ENABLEDELAYEDEXPANSION
for /l %%i in (0,1,99) do (
   set /a n=100 + %%i
   echo !n:~1!
)
9 БалбесВ1с
 
23.08.11
12:09
(8)Это цикл для n от 50 до 99?
10 smaharbA
 
23.08.11
12:10
от 0 до 99
11 smaharbA
 
23.08.11
12:11
если не нужен незначащий нуль убрать сет и оставить !н!
12 БалбесВ1с
 
23.08.11
12:12
(11)А как это n подставить в названия файлов?
13 smaharbA
 
23.08.11
12:12
а так в (6)
14 smaharbA
 
23.08.11
12:13
(12) так и подставляй внутри цикала !n!
15 БалбесВ1с
 
23.08.11
12:14
Set $SRC=list_add!n!txt
Set $EXC=list_excl!n!.txt
Set $DST=D:\backups!n! так что ли?
16 smaharbA
 
23.08.11
12:23
(15)

setlocal ENABLEDELAYEDEXPANSION
rem если нужны ведущие нули ставим 1
set null=0
for /l %%i in (0,1,99) do (
  set n=%%i
  if %null% equ 1 (
      set /a n=100 + !n!
      set n=!n:~1!
  )
  Set $SRC=list_add!n!txt
  Set $EXC=list_excl!n!.txt
  Set $DST=D:\backups!n!
  ...
  ...
)
17 smaharbA
 
23.08.11
12:29
+(6)

setlocal ENABLEDELAYEDEXPANSION
for %%i in ("%~dp0\list_add*.txt") do (
   set x=%%~ni
   Set $SRC=list_add!x!.txt
   Set $EXC=list_excl!x!.txt
   Set $DST=D:\backups!x!
   ...
   ...
)
18 smaharbA
 
23.08.11
12:31
вернее в (17)

setlocal ENABLEDELAYEDEXPANSION
for %%i in ("%~dp0\list_add*.txt") do (
   set x=%%~ni
   set x=!x:list_add=!
   Set $SRC=list_add!x!.txt
   Set $EXC=list_excl!x!.txt
   Set $DST=D:\backups!x!
   ...
   ...
)
19 БалбесВ1с
 
23.08.11
12:37
echo %date% %time% ***Start***
setlocal ENABLEDELAYEDEXPANSION
for %%i in ("%~dp0\list_add*.txt") do (
   set x=%%~ni
   set x=!x:list_add=!
   Set $SRC=list_add!x!.txt
   Set $EXC=list_excl!x!.txt
   Set $DST=D:\backups!x!
   Set $COMPR=1
   Set $COPIES=7

C:\"Program Files"\7-Zip\7z.exe a -t7z -mhe=on "%$DST%\files%DATE:~-4%-%DATE:~3,2%-%DATE:~0,2%_%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%.7z" @%$SRC% -scsWIN  -mx=%$COMPR% -ssw -xr@%$EXC%
For /F "Delims=" %%i In ('DIR /B/O:-N %$DST%\files????-??-??_??-??-??.7z') Do (
Set /A $COPIES-=1
If !$COPIES! LSS 0 DEL "%$DST%\%%i"
)
)
pause
echo %date% %time% ***End***
Так вот не получается.Инкорект лайн.
20 БалбесВ1с
 
23.08.11
12:39
Простите если туплю.Просто если чтото доработать в скрипте я еще могу.То вот с таким не сталкивался вообще.
21 smaharbA
 
23.08.11
12:48
echo %date% %time% ***Start***
setlocal ENABLEDELAYEDEXPANSION
Set $COMPR=1
Set $COPIES=7
for %%i in ("%~dp0\list_add*.txt") do (
  set x=%%~ni
  set x=!x:list_add=!
  Set $SRC=list_add!x!.txt
  Set $EXC=list_excl!x!.txt
  Set $DST=D:\backups!x!

C:\"Program Files"\7-Zip\7z.exe a -t7z -mhe=on "!$DST!\files%DATE:~-4%-%DATE:~3,2%-%DATE:~0,2%_%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%.7z" @!$SRC! -scsWIN  -mx=%$COMPR% -ssw -xr@!$EXC!
For /F "Delims=" %%i In ('DIR /B/O:-N !$DST!\files????-??-??_??-??-??.7z') Do (
Set /A $COPIES-=1
If !$COPIES! LSS 0 DEL "!$DST!\%%i"
)
)
pause
echo %date% %time% ***End***
22 smaharbA
 
23.08.11
12:50
при отложенном расширении переменных в циклах и прочих субшелах вместо процентов нужно использовать восклицательные знаки в тех переменных которые создаются/задаются в теле цыкла
23 smaharbA
 
23.08.11
12:51
результат то какой надо, может попросче сделать
лениво разбираться с семь зипом
24 БалбесВ1с
 
23.08.11
12:58
(230Не,не работает(
25 БалбесВ1с
 
23.08.11
13:01
Смысл такой.Есть вот этот скрипт.
echo %date% %time% ***Start***

SetLocal EnableDelayedExpansion
Set $SRC=list_add.txt
Set $EXC=list_excl.txt
Set $DST=D:\backups
Set $COMPR=1
Set $COPIES=7

C:\"Program Files"\7-Zip\7z.exe a -t7z -mhe=on "%$DST%\files%DATE:~-4%-%DATE:~3,2%-%DATE:~0,2%_%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%.7z" @%$SRC% -scsWIN  -mx=%$COMPR% -ssw -xr@%$EXC%
For /F "Delims=" %%i In ('DIR /B/O:-N %$DST%\files????-??-??_??-??-??.7z') Do (
Set /A $COPIES-=1
If !$COPIES! LSS 0 DEL "%$DST%\%%i"
)
echo %date% %time% ***End***

Я хочу из реестра или v8i в txt скидывать пути к базам.А скрипт должен прочитать все тхт и запаковать базы по папкам.Так то он отлично работает.Количество копий указывается($COPIES=7).Исключения(list_excl!x!.txt).Сжатие.
Вот с тхт только загвоздка.
26 БалбесВ1с
 
23.08.11
13:03
Если его допилить.Да еще и читать данные о базах из реестра.То в книгу знаний попадет скрипт этот)Имхо он удобный.
27 smaharbA
 
23.08.11
13:36
При копировании с форума в концах строк удаляй пробел, он возникает

echo off
echo %date% %time% ***Start***
setlocal ENABLEDELAYEDEXPANSION
Set $COMPR=1
Set $COPIES=7
for %%i in ("%~dp0\list_add*.txt") do (
   set x=%%~ni
   set x=!x:list_add=!
   Set $SRC=%~dp0\list_add!x!.txt
   Set $EXC=%~dp0\list_excl!x!.txt
   Set $DST=D:\backups!x!
   set xyear=%date:~-4%
   set xmon=%date:~-3,2%
   set xday=%date:~-0,2%
   set xtime=%time::=-%
   set xtime=%time:,=-%
   set xdatetime=!xyear!-!xmon!_!xday!-!xtime!
   start "" /b "C:\Program Files\7-Zip\7z.exe" a -t7z -mhe=on "!$DST!\files!xdatetime!.7z" @"!$SRC!" -scsWIN  -mx=%$COMPR% -ssw -xr@"!$EXC!"
   for %%x in ("!$DST!\files????-??-??_??-??-??-??.7z") Do (
       Set /A $COPIES-=1
       If !$COPIES! LSS 0 DEL /q "!$DST!\%%i"
   )
)
echo %date% %time% ***End***
pause
28 smaharbA
 
23.08.11
13:37
set xdatetime=!xyear!-!xmon!_!xday!-!xtime!

заменить на

set xdatetime=!xyear!-!xmon!-!xday!_!xtime!
29 smaharbA
 
23.08.11
13:44
+ start "" /b - не обязательно, 7з.ехе консольное оказывается
30 БалбесВ1с
 
23.08.11
14:03
echo off
23.08.2011 14:03:09,95 ***Start***
23.08.2011 14:03:09,96 ***End***
Для продолжения нажмите любую клавишу . . .
7-Zip 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18

7-Zip 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
ScanningScanning

Creating archive D:\backups2\files2011-01-23_14:03:09-95.7z



Creating archive D:\backups\files2011-01-23_14:03:09-95.7z


Error:

Error:
7-Zip cannot open file
D:\backups\files2011-01-23_14:03:09-95.7z
Параметр задан неверно.

7-Zip cannot open file
D:\backups2\files2011-01-23_14:03:09-95.7z
Параметр задан неверно.





System error:System error:

Неопознанная ошибка
Неопознанная ошибка
31 БалбесВ1с
 
23.08.11
14:05
Правда создал 2 пустых каталога как положено.
32 smaharbA
 
23.08.11
14:11
попутал сам ))

set xtime=%time::=-%
set xtime=!xtime:,=-!
33 БалбесВ1с
 
23.08.11
14:17
echo off
echo %date% %time% ***Start***
setlocal ENABLEDELAYEDEXPANSION
Set $COMPR=1
Set $COPIES=7
for %%i in ("%~dp0\list_add*.txt") do (
   set x=%%~ni
   set x=!x:list_add=!
   Set $SRC=%~dp0\list_add!x!.txt
   Set $EXC=%~dp0\list_excl!x!.txt
   Set $DST=D:\backups!x!
   set xyear=%date:~-4%
   set xmon=%date:~-3,2%
   set xday=%date:~-0,2%
   set xtime=%time::=-%
   set xtime=!xtime:,=-!
   set xdatetime=!xyear!-!xmon!-!xday!_!xtime!
   start "" /b "C:\Program Files\7-Zip\7z.exe" a -t7z -mhe=on "!$DST!\files!xdatetime!.7z" @"!$SRC!"

-scsWIN  -mx=%$COMPR% -ssw -xr@"!$EXC!"
   for %%x in ("!$DST!\files????-??-??_??-??-??-??.7z") Do (
       Set /A $COPIES-=1
       If !$COPIES! LSS 0 DEL /q "!$DST!\%%i"
   )
)
echo %date% %time% ***End***

Спасибо большое.Всё вроде работает.Буду тестировать.
Дальше попробую пути к базам вытащить и засунуть.
34 smaharbA
 
23.08.11
14:24
наверное лучче вот так

set xdate=!date!
set xyear=!xdate:~-4!
set xmon=!xdate:~-3,2!
set xday=!xdate:~-0,2!
set xtime=!time::=-!
set xtime=!xtime:,=-!

вместо
set xyear=%date:~-4%
...
35 БалбесВ1с
 
23.08.11
14:27
(34)А что это такое вообще? Чтоб имена файлов различались?
36 smaharbA
 
23.08.11
14:28
(35) если будут %date% %time% - то в цикле всегда одни и теже значения будут
37 smaharbA
 
23.08.11
14:29
а если !date! !time! то реальные (на сколько система позволяет) дата и время на каждый оборот цыкла
38 БалбесВ1с
 
23.08.11
14:30
(34)Не катит - каждый раз создается файл files.7z
39 smaharbA
 
23.08.11
14:32
если интересует один файл по дате времени запуска пакетника, то вынести за цикл так

set xdate=%date%
set xyear=%xdate:~-4%
set xmon=%xdate:~-3,2%
set xday=%xdate:~-0,2%
set xtime=%time::=-%
set xtime=%xtime:,=-%
set xdatetime=%xyear%-%xmon%-%xday%_%xtime%
40 БалбесВ1с
 
23.08.11
14:41
Блин,теперь старые не удаляет.
41 smaharbA
 
23.08.11
14:50
for %%x in ("!$DST!\files????-??-??_??-??-??-??.7z") Do (
      Set /A $COPIES-=1
      If !$COPIES! LSS 0 DEL /q "%%~i"
  )
42 smaharbA
 
23.08.11
14:51
вернее

for %%X in ("!$DST!\files????-??-??_??-??-??-??.7z") Do (
     Set /A $COPIES-=1
     If !$COPIES! LSS 0 DEL /q "%%~X"
 )
43 БалбесВ1с
 
23.08.11
15:03
echo off
echo %date% %time% ***Start***
setlocal ENABLEDELAYEDEXPANSION
Set $COMPR=1
Set $COPIES=3
set xdate=%date%
set xyear=%xdate:~-4%
set xmon=%xdate:~-3,2%
set xday=%xdate:~-0,2%
set xtime=%time::=-%
set xtime=%xtime:,=-%
set xdatetime=%xyear%-%xmon%-%xday%_%xtime%
for %%i in ("%~dp0\list_add*.txt") do (
   set x=%%~ni
   set x=!x:list_add=!
   Set $SRC=%~dp0\list_add!x!.txt
   Set $EXC=%~dp0\list_excl!x!.txt
   Set $DST=D:\backups!x!
   
   start "" /b "C:\Program Files\7-Zip\7z.exe" a -t7z -mhe=on "!$DST!\files!xdatetime!.7z" @"!$SRC!" -scsWIN  -mx=%$COMPR% -ssw -xr@"!$EXC!"
)
for %%X in ("!$DST!\files????-??-??_??-??-??-??.7z") Do (
     Set /A $COPIES-=1
     If !$COPIES! LSS 0 DEL /q "%%~X"
 )
echo %date% %time% ***End***
если так то удаляет только из последней папки backup2
44 БалбесВ1с
 
23.08.11
15:06
А если в общий цикл записать удаление то в одной папке 1 архив во второй 4 при копиес = 3
45 smaharbA
 
23.08.11
15:11
в тело цикла

...
start "" /b "C:\Program Files\7-Zip\7z.exe" a -t7z -mhe=on "!$DST!\files!xdatetime!.7z" @"!$SRC!" -scsWIN  -mx=%$COMPR% -ssw -xr@"!$EXC!"
for %%X in ("!$DST!\files????-??-??_??-??-??-??.7z") Do (
    Set /A $COPIES-=1
    If !$COPIES! LSS 0 DEL /q "%%~X"
)
)
46 smaharbA
 
23.08.11
15:12
нужно что удалять ?
самый ранний файл в каждой папке ?
47 БалбесВ1с
 
23.08.11
15:15
(46)Да.
48 БалбесВ1с
 
23.08.11
15:16
(46)Ой.Я наверно в одну минуту копии делал.Сейчас минуту ждать буду.
49 БалбесВ1с
 
23.08.11
15:19
Нет.Все равно в одной 1 файл остается после 4го бэкапа а в другой четыре а должно 3 и 3.
50 smaharbA
 
23.08.11
16:27
Set /A $COPIES=7
for /f "delims=" %%X in ('dir /b /s /o:-n "!$DST!\files????-??-??_??-??-??-??.7z"') Do (
    Set /A $COPIES-=1
    If !$COPIES! LSS 0 DEL /q "%%~X"
)
)
echo %date% %time% ***End***
51 БалбесВ1с
 
23.08.11
17:52
(50)К сожалению неправильно получается.
52 smaharbA
 
23.08.11
19:13
не верю
53 Господин ПЖ
 
23.08.11
19:32
написал бы давно православный vbs... и возможностей больше и отладка проще...
54 БалбесВ1с
 
23.08.11
19:41
(52)
echo off
echo %date% %time% ***Start***
setlocal ENABLEDELAYEDEXPANSION
Set $COMPR=1
set xdate=%date%
set xyear=%xdate:~-4%
set xmon=%xdate:~-3,2%
set xday=%xdate:~-0,2%
set xtime=%time::=-%
set xtime=%xtime:,=-%
set xdatetime=%xyear%-%xmon%-%xday%_%xtime%
for %%i in ("%~dp0\list_add*.txt") do (
  set x=%%~ni
  set x=!x:list_add=!
  Set $SRC=%~dp0\list_add!x!.txt
  Set $EXC=%~dp0\list_excl!x!.txt
  Set $DST=D:\backups!x!
 
  start "" /b "C:\Program Files\7-Zip\7z.exe" a -t7z -mhe=on "!$DST!\files!xdatetime!.7z" @"!$SRC!" -scsWIN  -mx=%$COMPR% -ssw -xr@"!$EXC!"
Set /A $COPIES=3
for /f "delims=" %%X in ('dir /b /s /o:-n "!$DST!\files????-??-??_??-??-??-??.7z"') Do (
   Set /A $COPIES-=1
   If !$COPIES! LSS 0 DEL /q "%%~X"
)
)
echo %date% %time% ***End***
Так все работает.Это я на работе неправильно что-то накопипастил.Только копий делает 4 при выставленных 3-х.Но это же неплохо.Спасибо еще раз.
55 БалбесВ1с
 
23.08.11
19:43
(53)Отец у меня католик.И я наверно в душе тоже.
56 БалбесВ1с
 
23.08.11
19:43
(53)А что в vbs проще?