Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Задачи на bat-файлах 2

Автор: Elroir
Дата сообщения: 26.01.2007 12:34
freedom83
Извини, недоглядел
Исправленный код:

Код:
@echo off
setlocal enabledelayedexpansion
set source=c:\dir1\
set dest=c:\dir2\
set cdate=%date:,=%
for %%a in (%source%*.txt) do (
set fdate=%%~ta
set fdate=!fdate:~0,10!
set fdate=!fdate:,=!
if not !fdate!==!cdate! move "%%a" %dest%
Автор: ViSiToR
Дата сообщения: 26.01.2007 19:00
Elroir

Цитата:
Э... эти строчки в коде не надо поменять местами?

Точно! спасибо что заметил, а я писал...


Цитата:
Давно написал батник



Добавлено:
Перезалил архив, и поправил код в своём посте.
Автор: Tipulatoid
Дата сообщения: 29.01.2007 00:20
Здравствуйте

есть файл prices.txt:

Код: SAGA 4,50 4,60 4,60 4,50 0,000 0,00
PlayGirl 3,74 3,94 4,04 3,99 0,000 0,00
Уфа 3,80 3,90 3,90 3,90 0,000 0,00
BSC КФХ Славинка 3,70 3,70 3,70 3,70 0,000 0,00
Raul Gonsalez 4,07 4,46 4,55 4,55 0,000 0,00
Last champion 3,69 4,20 4,30 4,24 0,000 0,00
Автор: Nagual
Дата сообщения: 29.01.2007 00:50
давно есть такая задача, решение так и нашел, может кто подскажет

дано:
две огромнейшие папки, вложенность очень высокая, количество файлов очень велико, файлы меняются в одной из папок, вторая папка служит зеркалом (бекапом) первой
улитита xcopy
комсценарий

задание:
необходимо синхронизировать эти папки таким образом, чтобы при создании в одной из них любого файла(ов) с тем же именем но более нового (версия, дата) он бы копировался в папку синхронизации (зеркало), а при удалении одного из файлов в одной из папок-зеркал этот файл(ы) удалялся(лись) бы из другой папки

другое решение этой проблемы -- удалить более старую папку и закачать на ее место более новую имеет один существенный недостаток, а именно, потерю огромного количества времени на удаление и копирование все файлов заново

мною решена только первая часть задачи, вот этим кодом


Код: xcopy /y /e /v /c /i /h /r /k /g /d folder1 folder2
xcopy /y /e /v /c /i /h /r /k /g /d folder2 folder1
Автор: igor_andreev
Дата сообщения: 29.01.2007 02:00
Tipulatoid

Цитата:
можно ли из него удалить все слова, оставив только числа:


Код:
Set fso = CreateObject("Scripting.FileSystemObject")
Set fs = fso.OpenTextFile("prices.txt", 1, false)
fsContent = fs.ReadAll
fs.Close
Set f = fso.OpenTextFile("new_prices.txt", 2, true)

Set regEx = New RegExp
regEx.Pattern = "\D*([0-9\,\s]*)$"
regEx.MultiLine = True
regEx.Global = True
Set Matches = regEx.Execute(fsContent)
For Each Match in Matches
RetStr = RetStr & Match.Value & vbCRLF
RetStr = regEx.Replace(RetStr, "$1")
Next
f.Write RetStr
f.Close
Автор: Tipulatoid
Дата сообщения: 29.01.2007 02:31
igor_andreev
Спасибо
Подозреваю, что код этот написан на VB.

Не подскажете тогда уж как запускать VB-сценарий из командной строки

Добавлено
Сам разобрался Спасибо
Автор: Nagual
Дата сообщения: 29.01.2007 02:45
igor_andreev
спасибо за вариант, конечно хотелось бы лучше штатными средствами
можешь привести свой код того, чем пользуешь? раз уж ты владеешь этой темой
Tipulatoid
дак а что там пускать то

Код: %1
Автор: Tipulatoid
Дата сообщения: 29.01.2007 04:12
igor_andreev


Цитата:

Код: Set fso = CreateObject("Scripting.FileSystemObject")
Set fs = fso.OpenTextFile("prices.txt", 1, false)
fsContent = fs.ReadAll
fs.Close
Set f = fso.OpenTextFile("new_prices.txt", 2, true)

Set regEx = New RegExp
regEx.Pattern = "\D*([0-9\,\s]*)$"
regEx.MultiLine = True
regEx.Global = True
Set Matches = regEx.Execute(fsContent)
For Each Match in Matches
RetStr = RetStr & Match.Value & vbCRLF
RetStr = regEx.Replace(RetStr, "$1")
Next
f.Write RetStr
f.Close
Автор: igor_andreev
Дата сообщения: 29.01.2007 04:48
Tipulatoid
Просто добавь в регэксп дефис \-

Код:
regEx.Pattern = "\D*([0-9\,\-\s]*)$"
Автор: Maza Faka
Дата сообщения: 29.01.2007 06:07
Нужно написать батник такого содержания: имеется прожка, которая не запускается, если в реестре не прописан к ней путь, например: HKLM\SOFTWARE\Proga REG_SZ "C:\Program Files\Proga", пользователь может скопировать прожку куда угодно и запускать оттуда.
Как присвоить переменной путь где находится прожка и вписать её в реестр? То есть написать такой батник, пользователь будет запускать прогу через батник...
Автор: Tipulatoid
Дата сообщения: 29.01.2007 09:00
igor_andreev
И все-таки остались косячки
вот пример файла stock.txt:

Код: SAGA 6,42 9,24 10,55 1,23
PlayGirl 8,92 15,57 20,56 4,39
Уфа -0,59 0,00 -7,54 0,00
BSC КФХ Славинка 8,60 14,78 19,31 4,02
Raul Gonsalez 8,69 14,23 18,00 2,48
Last champion 8,90 14,77 18,85 2,75
Автор: Elroir
Дата сообщения: 29.01.2007 09:49
Maza Faka

Цитата:
Как присвоить переменной путь где находится прожка и вписать её в реестр?


Код:
@echo off
setlocal
set cpath=%~dp0
reg add HKLM\Software\Proga /ve /d "%cpath:~0,-1%" /f>nul
Автор: Maza Faka
Дата сообщения: 29.01.2007 10:52
Elroir

Цитата:
set cpath=%~dp0


Что тут происходит? Обьясни ПЛЗ
Автор: Elroir
Дата сообщения: 29.01.2007 11:02
Maza Faka
В батнике переменная %0 - это название самого батника.
А модификатор ~dp, дает нам полный путь к файлу, имя которого находится в переменной. Соответственно %~dp0 - даст нам полный путь до того места, где находится батник. Есть одна тонкость - ~dp выдает путь с чертой в конце. Для того, чтобы ее убрать, я использую вспомогательную переменную cpath, от которой "отрезаю" последний символ.
Автор: igor_andreev
Дата сообщения: 29.01.2007 12:53
Tipulatoid
Ну для приведенного тобой кусочка stock.txt вот так

Код:
regEx.Pattern = "\D(\s[\s\-\,0-9]{4,})$"
Автор: ViSiToR
Дата сообщения: 29.01.2007 17:23
Возможно ли написать батник, который будет работать как переключатель для отображения расширения файлов и отображения скрытых файлов? т.е нужно чтобы при запуске батника, у всех файлов отображалось расширение и все скрытые файлы тоже отображались (не меняя их атрибуты), а при повторном запуске, чтобы всё возвращалось в норму (по умолчанию).

Полагаю это где то в реестре делается, но я никак не могу найти где, может кто то знает, подскажите плиз, а переключатель я уже как нибудь сам забацаю

Elroir
Твой последний пост добавил в шапку .
Автор: Elroir
Дата сообщения: 29.01.2007 17:37
ViSiToR

Цитата:
добавил в шапку

Ну раз добавил, тогда я скажу где в реестре эти значения

Код:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
"Hidden"=dword:00000001
"HideFileExt"=dword:00000000
Автор: Maza Faka
Дата сообщения: 29.01.2007 17:38
Elroir

Цитата:
reg add HKLM\Software\Proga /ve /d "%cpath:~0,-1%" /f>nul

Для чего нужно это: ":~0,-1" ?
Вот так тоже работает: reg add HKLM\Software\Proga /ve /d "%cpath%" /f>nul
Автор: 01MDM
Дата сообщения: 29.01.2007 17:55
ViSiToR


Цитата:
т.е нужно чтобы при запуске батника, у всех файлов отображалось расширение и все скрытые файлы тоже отображались (не меняя их атрибуты)


Может так:

dir /b | attrib

Автор: Elroir
Дата сообщения: 29.01.2007 18:51
Maza Faka

Цитата:
Для чего нужно это: ":~0,-1" ?
Вот так тоже работает: reg add HKLM\Software\Proga /ve /d "%cpath%" /f>nul

Дубль два :

Цитата:
Есть одна тонкость - ~dp выдает путь с чертой в конце. Для того, чтобы ее убрать, я использую вспомогательную переменную cpath, от которой "отрезаю" последний символ.

":~0,-1" - взять все символы из переменной, кроме последнего.
Проверь, что у тебя записывается в реестр без этого.
Автор: ViSiToR
Дата сообщения: 29.01.2007 19:57
Elroir

Цитата:
скажу где в реестре эти значения

Большое спасибо!

Вот накалякал переключатель, и, кстати, ненужно перезапускать експлорер, достаточно обновить папку/рабочий стол...


Код: @echo off
Reg Query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v Hidden> %temp%\regquery.tmp
For /f "delims= " %%a in (%temp%\regquery.tmp) do set HidVal1=%%a
If %HidVal1:~-3%==0x1 (Reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v hidden /t REG_DWORD /d 2 /f) else (
Reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v Hidden /t REG_DWORD /d 1 /f)
)

Reg Query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v HideFileExt> %temp%\regquery.tmp
For /f "delims= " %%a in (%temp%\regquery.tmp) do set HidVal2=%%a
If %HidVal2:~-3%==0x1 (Reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v HideFileExt /t REG_DWORD /d 0 /f) else (
Reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v HideFileExt /t REG_DWORD /d 1 /f)
)
del %temp%\regquery.tmp
Автор: Elroir
Дата сообщения: 29.01.2007 21:15
ViSiToR

Цитата:
Можно наверно и без вывода в файл, ... если кто-то поправит

Поправляю

Код:
@echo off
setlocal enableextensions
for /f "usebackq delims= " %%a in (`"Reg Query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v Hidden"`) do set HidVal1=%%a
If %HidVal1:~-3%==0x1 (Reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v hidden /t REG_DWORD /d 2 /f>nul) else (
Reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v Hidden /t REG_DWORD /d 1 /f>nul)
for /f "usebackq delims= " %%a in (`"Reg Query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v HideFileExt"`) do set HidVal2=%%a
If %HidVal2:~-3%==0x1 (Reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v HideFileExt /t REG_DWORD /d 0 /f>nul) else (
Reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v HideFileExt /t REG_DWORD /d 1 /f>nul)
Автор: ViSiToR
Дата сообщения: 29.01.2007 23:44
Elroir

Цитата:
Поправляю

Спасибо, но теперь и мой пример не работает , в реестер пишется как надо, но обновление не действует...

Чувствую что то в системе делает команда setlocal enableextensions...
Автор: Elroir
Дата сообщения: 29.01.2007 23:50
ViSiToR

Цитата:
Чувствую что то в системе делает команда setlocal enableextensions...

В принципе, его можно отключить - я написал просто на всякий случай. Но у меня что твой код, что мой - все равно не обновляется.

Добавлено:
Поправка - если нажать на View->Refresh тогда обновляется.
Автор: bert85
Дата сообщения: 29.01.2007 23:59
Помогите, пожалуйста, батником, который бы в папке (по заранее заданному пути ) создавал текстовый файл с определенным расширением и вписывал туда пару строчек текста (прописываются в самом батнике). Если в той директории существует уже файл с таким именем, то его нужно заменить новым. Вотъ.
Автор: Elroir
Дата сообщения: 30.01.2007 00:10
bert85

Код:
@echo off
setlocal
set dpath=c:\temp\
set file_name=file.ext
echo Text line number one>%dpath%%file_name%
echo Text line number two>>%dpath%%file_name%
Автор: ViSiToR
Дата сообщения: 30.01.2007 00:19
Elroir
Мой пример работал до запуска примера без использования временного файла.... ладно, другой вопрос - как запустить свойства папки батником?
Автор: bert85
Дата сообщения: 30.01.2007 00:32
Elroir
БОЛЬШОЕ тебе СПАСИБО
Автор: stalker0
Дата сообщения: 30.01.2007 00:58
утилита shutdown.exe при работе в Вин2000 в батнике ведет себя "не правильно" -
не так как в ВинХР (требует ввести имя удаленного ПК, завершает работу ПК некорректно)
Может есть замена этой утилите?

Нужно: выключить ПК,напр., через 5 часов.
Спасибо.
Автор: igor_andreev
Дата сообщения: 30.01.2007 01:28

Цитата:
как запустить свойства папки батником?

RunDll32.exe shell32.dll,Options_RunDLL 0

Добавлено:
Хотя вам скорее всего нужна команда
RunDll32.exe USER32.DLL,UpdatePerUserSystemParameters ,1 ,True
она по идее обновляет настройки из ветки HKEY_CURRENT_USER

Добавлено:
А все команды rundll32 тут живут

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Сбой активации XP sp2


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.