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

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

Автор: 01MDM
Дата сообщения: 06.07.2011 17:00

Цитата:
BAT-язык windows xp отличается чем-нибуть от windows7 ?

Нет. Если не считать различие в некоторых утилитах (netsh, wmic, fsutil), плюс добавлены новые.
Автор: king_stiven
Дата сообщения: 06.07.2011 18:23
qqqbbb

Цитата:
Можно добавить в шапку: делаем деинсталятор

А чё это?
Автор: Nikoderiko
Дата сообщения: 07.07.2011 00:29
Как батником очистить одну и ту же папку на всех дисках?
Например, <буква диска>:/Temp ?????
Нужно удалить не всю папку, а только её содержимое.
Автор: Taran2ul
Дата сообщения: 07.07.2011 01:42
Люди! Подскажите пожалуйста как с помощью батника решить такую задачу:
есть программа.exe и распаковать ее можно с помощью параметра /u. Требуется создать *.cmd для распаковки файла программа.exe, но при этом имя exe'шника может меняться (программа1.exe, программа2.exe). Можно ли как нибудь унифицировать батник, например, чтобы распаковывались все *.exe файлы в папке.

Nikoderiko

Код: PushD c:\temp
if not errorlevel 1 RD /s /q .
PopD
PushD d:\temp
if not errorlevel 1 RD /s /q .
PopD
...
Автор: Nikoderiko
Дата сообщения: 07.07.2011 02:33
За совет спасибо Но если диски разные? от A до Z перечислять?
Должна быть команда, которая перебирает все диски....
Автор: AZJIO
Дата сообщения: 07.07.2011 03:22
Nikoderiko
перебор дисков

Код: for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist %%i:\temp set disk=%%i:\
Автор: BVV63
Дата сообщения: 07.07.2011 04:53

AZJIO

Цитата:
Если кому интересно, сделал утилиту forum

Ну-у... Вот если бы на батнике!
Автор: king_stiven
Дата сообщения: 07.07.2011 05:29

Цитата:
Ну-у... Вот если бы на батнике!

с вгетом можно
Автор: GRiMka
Дата сообщения: 07.07.2011 07:32
У меня вопрос к знатокам, задача простая, нужно копировать файлы с расширением pdf из одной папки локальной сети, в другую. Причем копировать только новые файлы. сделал так:

xcopy \\62.XX.XX.XX\сканирование\Договора\*.pdf \\fileserver\Scan\*.pdf /D

Но не смотря на ключ "/D" каждый раз xcopy выдает запрос на перезапись файлов которые уже были скопированы ранее. В чем затык? Уже голову сломал!
Автор: AZJIO
Дата сообщения: 07.07.2011 08:10
GRiMka
я с такими ключами копирую:

Код: xcopy "путь\имя_файла" "%windir%\SYSTEM32\" /Q /H /Y /K /C
Автор: GRiMka
Дата сообщения: 07.07.2011 09:02
AZJIO

У тебя он все каждый раз заново копирует, а мне нужно только новые файлы.
Автор: AZJIO
Дата сообщения: 07.07.2011 09:13
GRiMka
скрести с ключом /D
Например /D /Y
/Y - Подавляет запрос на подтверждение перезаписи существующего конечного файла.
Вы справку по командам совсем что ли не читаете? Откуда то же взяли /D, там же и про остальные ключи подробно написано.
Я в предыдущем посте всего лишь привёл пример стандартного копирования, как это делает винда, добавив подавление перезаписи (Y) и продожить при ошибке (C).
Автор: GRiMka
Дата сообщения: 07.07.2011 09:24
AZJIO

Я как раз читал справку, ключ /Y подавляет запрос и равносилен нажатию на клавишу "Y" а мне нужно копировать только новые файлы а не все подряд!
Автор: AZJIO
Дата сообщения: 07.07.2011 09:25
GRiMka

Цитата:
копировать только новые файлы
Для этого и нужен ключ D

На всякий случай попробуй заменить строку
\\fileserver\Scan\*.pdf
на
\\fileserver\Scan\
Автор: GRiMka
Дата сообщения: 07.07.2011 09:31
AZJIO

В том то и дело что ключ /D прекрасно работает при копировании на локальной машине (из папки в папку скажем). Но в моем случае нужно из одной шары копировать в другую и в этом случае что с ключем /D что без него, xcopy пытается каждый раз скопировать все что есть.

Автор: wolf0425
Дата сообщения: 07.07.2011 10:58

Цитата:
Но в моем случае нужно из одной шары копировать в другую и в этом случае что с ключем /D что без него,
странно это.
только что вот проверил - повторный запуск xcopy /d /y \\server\c$\TMP\* \\ts-000\d$\temp\ ничего не копирует, пишет "Скопировано файлов: 0."

Может у тебя время между компами не синхронно? домен то есть?

ps: запускал на XP, шары на 2003 и ХР, все в домене.
Автор: GRiMka
Дата сообщения: 07.07.2011 11:28
wolf0425

Спасибо за ответ! Да, я кажется понял в чем причина, в одной из моих шар (шара приемник), своя файловая система (не FAT и NTFS).
Автор: wasp238
Дата сообщения: 07.07.2011 11:47

Цитата:
Помогите, пожалуйста, составить батник.
Задача:
Каждый день, в папку d:\Temp\ "ложится" бекап с именем backup.zip, на следующий день он перезаписывается новым.
Надо этот файл залить на фтп login:pass@server.com/www/backup/
притом файл надо переименовать в backup(ГГ-ММ-ЧЧ).zip, а в папке на фтп должно находится не более 25 таких зипов (т.е. батник должен проанализировать дату архивов и удалять самый старый).

Никто не может помочь?
Автор: wolf0425
Дата сообщения: 07.07.2011 12:06
wasp238 разбей задачу по частям - переименование, копирование, удаление, и решай их последовательно.
примеры копирования на ftp и чтения там каталогов - в теме уже были, ищи по версии для печати, переименование вообще не должно быть проблемой.

Добавлено:
GRiMka

Цитата:
Да, я кажется понял в чем причина, в одной из моих шар (шара приемник), своя файловая система (не FAT и NTFS).
ну если там время с другой точностью хранится или попросту самба кривая - то вполне может и глючить (на всякий случай проверь существование прошивок поновее, может это какая-то давно известная и поправленная бага)

в самом печальном варианте - придется последовательно сравнивать размер/время файлов в шарах (%%~t %%~z) и если различаются - копировать файлы по одному.
%%~t - загрублено до минут, для твоей проверки на новизну должно хватать.
Автор: sfinx26
Дата сообщения: 07.07.2011 15:19
Здравствуйте, можно ли батником сделать следующее
есть структура папок


Код: корневой каталог
папка 1
папка 2
папка 3
папка 3.1
папка 3.2
Автор: 01MDM
Дата сообщения: 07.07.2011 16:50
sfinx26,
Как-то эдак:

Код:
@echo off
setlocal

set "cnt=100"
for /f "tokens=*" %%i in (' dir /b /s /ad ') do call:menu "%%i"
echo .......
set /p choice="Choose folder to copy: "
set /a choice+=100

for /f "tokens=2 delims==" %%i in (' set item_%choice% ') do echo copy /y "%%i\*"
goto:eof

:menu
set "item=%~1"
set /a cnt+=1

setlocal enabledelayedexpansion
echo [%cnt:~-2%] !item:%cd%\=!
endlocal

set "item_%cnt%=%~1"
Автор: Jin32
Дата сообщения: 07.07.2011 18:42
Друзья, такая проблема, надо на время выполнения некоторых операций откатывать время, примерно так:


Код: set mytime=14:30

set temptime=%time:~0,5%

time %mytime%

rem Здесь кое что проиходит
rem например пусть открывается кальулятор
calc.exe

time %temptime%

exit
Автор: 01MDM
Дата сообщения: 07.07.2011 19:13
Jin32
Т.е. запустить calc.exe и перевести время назад?

Код:
start "" "calc.exe"
Автор: Jin32
Дата сообщения: 07.07.2011 19:55
01MDM
Ну если бы так все бы просто было, я бы этот вопрос даже не задавал
Конечно же надо что бы все время пока работает "калькулятор" время было другое, мне нужное. А в этом варианте оно только в момент запуска мне нужное. Как вариант подошло бы откатывание текущего системного времени на заранее известный промежуток, а потом его возврат.
Автор: wolf0425
Дата сообщения: 07.07.2011 20:03
Jin32 а может полезнее время не откатывать к старому+коррекция, а тупо установить по внешнему источнику?
по домен-контролеру, по маршрутизатору, по яндексу наконец...

на или перед откатом вычисляешь на сколько секунд время после закрытия программы отличается от %mytime% и корректируешь на эти секунды то время, что сохранял. Задачи иметь работоспособность при переходе через полночь у тебя наверно нет, так что вычисления несложные.
Автор: Jin32
Дата сообщения: 07.07.2011 20:10
wolf0425
Само собой ночью я не работаю.
Контролировать по внешнему источнику не получиться, компы все разные, где то есть сеть и инет, где то полностью локально.
"Калькулятор" это работа некой программы, которая при своей работе создает файлы отчета, где фиксируется время и день работы, файлы отчета я должен тащить в офис, там их обрабатывают, они закодированы и взломать нет возможности. Цель всей затеи создать видимость графика работы приближенного к плановому.

Цитата:
на или перед откатом вычисляешь на сколько секунд время после закрытия программы отличается от %mytime% и корректируешь на эти секунды то время, что сохранял. Задачи иметь работоспособность при переходе через полночь у тебя наверно нет, так что вычисления несложные.

Так бы тоже подошло, но как это сделать? Хотя бы примерно?
Автор: kronomobil
Дата сообщения: 07.07.2011 20:32
wolf0425
Предложенный скрипт прекрасно справился с задачей. Проверено на W2K3. Те, у кого похожая задача, могут смело брать на вооружение
Автор: Elroir
Дата сообщения: 07.07.2011 20:44
sfinx26
То ли я не так понял, то ли 01MDM, но мой вариант сильно отличается от того, который он предложил:

Код:
@echo off
setlocal
subst z: .
pushd z:\
del /q ~list1.~ 2>nul
for /d %%a in (*) do for /f "tokens=*" %%b in ('2^>nul dir /b /a-d /s "%%a\*.txt"') do echo %%~pnxb>>~list1.~
:loop
set "currentFile="
set /p currentFile=<~list1.~
if "%currentFile%"=="" goto endLoop
call :extFileName "%currentFile%"
if "%currentFile%"=="%~nx1" goto removeProcessed
echo Processing "%currentFile%":
type ~list1.~ | find /i "%currentFile%">~sublist.~
type ~sublist.~ | find /v /n ""
set /p "nof=Please enter the number of file to copy: "
set /a "line=nof-1"
type ~sublist.~ | more +%line%>~sublist1.~
set /p fileToCopy=<~sublist1.~
copy "%fileToCopy%" .\
:removeProcessed
type ~list1.~ | find /i /v "%currentFile%">~list2.~ & del /q ~list1.~ & ren ~list2.~ ~list1.~
goto loop

:extFileName
set "currentFile=%~nx1"
goto :EOF

:endLoop
del /q ~list1.~ 2>nul
del /q ~sublist.~ 2>nul
del /q ~sublist1.~ 2>nul
popd
subst z: /d
Автор: JohnRD
Дата сообщения: 08.07.2011 08:06
добрый день

есть вопрос

в Windows есть интересная штука,
после блокировки дисплея по кнопке Windows+L либо по времени простоя,
для последующей разблокировки выставляется язык по умолчанию Юзера вот эта ветка реестра:
[HKEY_CURRENT_USER\Keyboard Layout\Preload]
"1"="00000419" русский
"2"="00000409"

а вот раскладка переключения та что у системы на момент Логона
а именно вот эта:
[HKEY_USERS\.DEFAULT\Keyboard Layout\Toggle]
"Language Hotkey"="2"
"Hotkey"="2" это Ctrl+Shift
"Layout Hotkey"="3"

тоесть если у человека язык по умолчанию Русский и раскладка Alt+Shift
ему нужно переключить язык для ввода пароля, он давит Alt+Shift а раскладка не та поскольку взята у системы
у всех юзеров разные любимые сочетания.

каким образом можно прочитав ветку реестра пользователя - его сочетание клавиш для переключения воткнуть в вветку системы
[HKEY_USERS\.DEFAULT\Keyboard Layout\Toggle]

политикой на систему логон скрипт, может читать ветку системы но не может читать пользовательскую поскольку она не загружена
а логон скрипт юзера не сможет прописать в системную ветку поскольку не хватит прав

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

спасибо
Автор: BVV63
Дата сообщения: 08.07.2011 08:39
JohnRD
Скрипт-то не проблема, пара строк. Только вот толку - ноль. Клавиши переключения не изменятся до перезагрузки.

Добавлено:
Ошибся, изменяются.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

Предыдущая тема: зависает установка Windows XP: 39 минут


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