Имя: Пароль:
IT
Админ
Помогите написать Bat файл
0 botman4
 
16.05.18
14:10
Есть папка "test1", в ней появляются периодически файлики. Их нужно копировать в другую папку, предварительно проверяя в "datebase.txt",
если там есть имя файла, тогда ничего не делаем,
если нету - тогда копируем этот файл в папку "test" и добавляем строку с именем этого файла в "datebase.txt"

вот что я написал,проверяется, копируется, но в файл "datebase.txt" имена файла не попадают.
for %%A in ("d:\test1\*.txt") do find /I /C datebase.txt "%%~nA" 1>nul || COPY /Y %%A "d:\test\" || echo "%%~nA" >>"datebase.txt"

Подскажите плз!
1 echo77
 
16.05.18
14:42
(0) А если так
for %%A in ("d:\test1\*.txt") do find /I /C datebase.txt "%%~nA" 1>nul || COPY /Y %%A "d:\test\" && echo "%%~nA" >>"datebase.txt"
2 echo77
 
16.05.18
14:46
Если я правильно помню, "||" - это переход к выполнению следующей команды, если предыдущая выполнилась "неуспешно"
"&&" - успешно, "&" - когда фиолетово на результат выполнения предыдущей команды
3 botman4
 
16.05.18
14:58
(2) Спасибо тебе, добрый человек! Все завелось!
4 Вафель
 
16.05.18
14:59
лучше js напиши. более понятный синтаксис.
эту строку ты же сам потом не разберешь
5 botman4
 
16.05.18
15:10
Ну я уже разберу )
а поповоду js гляну, спасибо.
6 D_E_S_131
 
16.05.18
15:21
ОФФ: Шо и здесь "дайбатнеги" уже? xD
7 Локи-13
 
16.05.18
15:26
уж лучше б на питоне написал, или, не в слух будет сказано, на 1скрипте
8 vcv
 
16.05.18
15:26
(4)(7) Вам бы только программы по любому чиху писать.
(0) А зачем проверка файла по текстовому файлу? Если для того, что бы не копировать уже однажды скопированное хватило бы одного xcopy с ключом /M
9 vcv
 
16.05.18
15:30
+(8) А если database.txt какой-то хитрый файл, можно xcopy указать ключ /EXCLUDE, что бы исключить файлы, перечисленные в database.txt.
А пополнять database.txt примерно так:
xcopy откуда куда /L >>database.txt
10 Franchiser
 
гуру
16.05.18
15:34
Что такое "%%~nA" ?
11 Franchiser
 
гуру
16.05.18
15:36
У меня похожая задача: можно ли как то в батнике переменную проверять со значением в первой строке файла и если он отличается, то заменять это значение?
12 vcv
 
16.05.18
15:37
(10) for /? в помощь
%%A переменная. ~n означает, что из полного имени файла в переменной %%A нужно взять только имя без расширения
13 Franchiser
 
гуру
16.05.18
15:39
(12) понял, посмотрел на stackoverflow
14 Franchiser
 
гуру
16.05.18
15:42
(12) без цикла for обратиться к строке в файле по номеру нельзя?
15 vcv
 
16.05.18
16:05
(14) Нормальных вариантов нет. Есть извратные.
Например: findstr /n . c:\boot.ini | findstr ^3:
получаем строку номер 3.
16 botman4
 
16.05.18
16:07
(8) файлы потом из второй папки удаляются. и файлы копируются из исходной папки в разные, для разных машин.
(9) а вот это попробую
17 vcv
 
16.05.18
16:17
(16) Может и стоит воспользоваться штатным атрибутом Архивный?
Кто-то создаёт файл. Атрибут архивный автоматом ставится. xcopy по какому-то критерию (наверное имени) копирует на нужную машину, снимая при этом атрибут Архивный, но только те файлы, для которых установлен Архивный. Вторая xcopy, копируя на другую машину, файлы, скопированные первой не видит, потому что атрибут Архивный снят.
Или я совсем не так задачу понял?
18 Franchiser
 
гуру
16.05.18
16:46
(15) у меня возвращает 2 строки
19 vcv
 
16.05.18
16:59
(18) Измени второй findstr. Возможно умолчания другие. Попробуй findstr /B /C:"3:"
20 Franchiser
 
гуру
16.05.18
17:06
(19) так работает)
21 botman4
 
16.05.18
17:12
(17) нет. так не пойдет.
Суть такова. Есть программа, которая получает обновления. Эти обновления в виде текстовых файлов.
После получения обновлений я их копирую, а потом прога их хавает.
Затем я эти скопированные обновления отправляю на webdav сервер(батником), там эти обновления копятся до потери сознания(не удаляются).
Затем в другом конце планеты, где эта программа по каким-то причинам не может получить обновления официально подключается к моему webdav серверу и забирает нужные обновы в свою папку, обновляется и удаляет их у себя.
Таких программ может стоять много по разным уголкам.
22 Сияющий в темноте
 
16.05.18
21:45
Напиши сценарий на VbScript и запихай его в планировщик,он и файлы сможет переименовать и в проверит надичие в целевой папке без какого либо файла
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн