|
Помогите с батником | ☑ | ||
---|---|---|---|---|
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
|
При копировании с форума в концах строк удаляй пробел, он возникает
|
|||
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 проще?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |