Ru-Board.club
← Вернуться в раздел «Программы»

» Командная строка, батники, сценарии (bat, cmd) 2

Автор: Zubov1
Дата сообщения: 25.08.2008 12:49
Есть файл в папке1 скажем (1.dbf-дбэфка вообщем) команда move перемещает его в папку2 с именем 250808.dbf (текущее число).
Через некоторое время в папке1 опять появляется файлик 1.dbf.
Вопрос можно ли чтобы второй и последующее вызовы батника дозаписывали вновь появившиеся файлы из папки1 в уже созданный 250808.dbf.
Вызывать внешнюю программу? Вообще возможно ли это?
Автор: 01MDM
Дата сообщения: 25.08.2008 13:29

Цитата:
Теперь всё скидывает (скопированные файлы и общий отчет) в то место откуда батник запускаю, только кидает прям так- не в папку.
Осталось малость, чтобы всё скидывалось в одну папку(имя папки-это имя машины и дата копирования).


На последнем примере:

Код:
@echo off
setlocal

set fld=%computername%_%date%
md "%fld%"

chcp 1251 1>nul
for %%i in (q w e r t y u i o p a s d f g h j k l z x c v b n m) do (
pushd %%i:\ 2>nul && (
for /f "tokens=*" %%i in ('dir /b /s /a *.pdf *.doc') do call:_set "%%i"
popd
)
)
for /f "tokens=2* delims==" %%i in ('set toCopy_') do (
if not exist "%%~nxi" (
copy %%i "%fld%" && echo %date%,%computername%,%%~i 1>>"%fld%\list.txt"
) else (
copy %%i "%fld%\~%%~nxi" && echo %date%,%computername%,%%~i 1>>"%fld%\list.txt"
)
)
chcp 866 1>nul
goto:eof

:_set
set /a cnt+=1
set toCopy_%cnt%=%1
Автор: azamapendrus
Дата сообщения: 25.08.2008 16:54
01MDM
В последнем варианте папка создаётся как надо, но файлов копированных в ней нет,т.е не копирует. А перед этим вариант был(№3) файлы копировались, папки не было.
Автор: 01MDM
Дата сообщения: 25.08.2008 17:31
azamapendrus

Цитата:
В последнем варианте папка создаётся как надо, но файлов копированных в ней нет,т.е не копирует.


Проверил у себя, все копирует в папку "CompName_25.08.08". Около 700 файлов с расширениями *.txt, *.m3u и *.lnk. Создается файл list.txt (около 80kb). Скрипт работает 2-3 минуты.

Могу только посоветовать убрать концевые пробелы.
Автор: azamapendrus
Дата сообщения: 25.08.2008 18:51
01MDM

если убираю кавычки в этих строках так :
copy %%i %fld% && echo %date%,%computername%,%%~i 1>>"%fld%\list.txt"
) else (
copy %%i %fld%\~%%~nxi && echo %date%,%computername%,%%~i 1>>"%fld%\list.txt"
тогда в папку копируются файлы, но без отчёта. А с кавычками " " создаётся пустая папка и в батнике пишет :путь не найден.
Автор: 01MDM
Дата сообщения: 25.08.2008 19:27

Цитата:
если убираю кавычки в этих строках так....
....тогда в папку копируются файлы, но без отчёта.


Кавычки должны быть обязательно:

"%fld%"
"%fld%\~%%~nxi"

Так как возможны пробелы в имени.

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

И на всякий случай, какая Windows? Я тестировал на Win XP Home.

Если все же не получается я попробую переработать предыдущий вариант.



Добавлено:
Вообщем вот так должно все быть Ok:

Код:
@echo off
chcp 1251 1>nul
set fld=%computername%_%date%
md "%fld%"

for %%i in (q w e r t y u i o p a s d f g h j k l z x c v b n m) do (
    pushd %%i:\ 2>nul && (
    for /f "tokens=*" %%i in ('dir /b /s /a *.doc *.pdf') do (
        if not "%%~dpi" equ "%~dp0%fld%\" (
            if not exist "%~dp0%fld%\%%~nxi" (
                copy "%%i" "%~dp0%fld%" && echo %computername%,%date%,%%i 1>>"%~dp0%fld%\list.txt"
            ) else (
             copy "%%i" "%~dp0%fld%\~%%~nxi" && echo %computername%,%date%,%%i 1>>"%~dp0%fld%\list.txt"
            )
         )
        )    
    )
    popd
)
chcp 866 1>nul
Автор: Kilich
Дата сообщения: 26.08.2008 09:09

Цитата:
Вопрос к великим гуру !

Задача такова:
Как при помощи батника завершить текущий сеанс пользователя и войти под другим
(Логин, пароль , домен)-обязательно.
Как покинуть сеанс я знаю(Shutdown -L), а вот с остальным проблема...
Если это возможно помогите!!!!



Неужели это не возможно?
Почему все молчат...?
Скажите хоть реально так сделать или нет!?
Автор: 01MDM
Дата сообщения: 26.08.2008 09:20
Kilich

Думаю, что нет
Автор: Zubov1
Дата сообщения: 26.08.2008 12:53
Помогите написать батничек плиз.
Значит есть файл fff.dbf в папке1 его переносим в папку2 с именем %Date%.dbf (текущее число). В папке1 через некоторое время опять появляется файл fff.dbf он всегда имеет одно и тоже название. Его нужно перенести в папку2 но с другим названием файла %Date%_1.dbf
Потом это повторяется. И в папке2 в конце дня будет
%Date%, %Date%_1, %Date%_2, %Date%_3 и т.д.

Сильно с пакетными командами не разбирался сильно не шарю. А на другом писать смысла нет. Используя Rename не красиво.

Подскажите решение заранее спасибо.
Автор: 01MDM
Дата сообщения: 26.08.2008 13:22
Zubov1


Код:
@echo off
setlocal

if not exist "1\fff.dbf" goto:eof
if not exist "2\%date%.dbf" move "1\fff.dbf" "2\%date%.dbf" && goto:eof

set cnt=0
for /f "tokens=2 delims=_." %%i in ('dir /b "2\%date%_*" 2^>nul') do set /a cnt+=1

set /a cnt+=1
move "1\fff.dbf" "2\%date%_%cnt%.dbf"
Автор: azamapendrus
Дата сообщения: 26.08.2008 13:27
01MDM
Поставил кавычки здесь (вариант№4):

@echo off
setlocal
set "fld=%computername%_%date%"

и теперь работает как надо, спасибо! Винда стоит VIENNA XP
Автор: 01MDM
Дата сообщения: 26.08.2008 14:07
azamapendrus

Лучше убери "a" и "b". Если даже floppy есть, то почти не используется в последнее время.

Автор: Smitis
Дата сообщения: 26.08.2008 14:07
Kilich

Цитата:
Как при помощи батника завершить текущий сеанс пользователя и войти под другим
(Логин, пароль , домен)-обязательно.

Входить автоматом? Можно попробовать через настройку autologon-на через реестр.
Автор: Kilich
Дата сообщения: 26.08.2008 14:13
Smitis
Как именно - если можно закрепите примерчиком!
Автор: Smitis
Дата сообщения: 26.08.2008 14:25
Kilich

Цитата:
Как именно - если можно закрепите примерчиком!

Примерчика нет, могу на словах:
- записать в реестр информацию для автологона через reg.exe или reg-файл
- перезагрузиться
- удалить через автозагрузку, при необходимости, информацию из реестра.
Не знаю, возможно ли это для домена. Скорее всего, да. При необходимости записать нужную информацию в реестр. Надо экспериментировать.


Добавлено:
http://forum.oszone.net/post-304003.html
http://support.microsoft.com/kb/315231/ru
Автор: Kilich
Дата сообщения: 26.08.2008 15:10
Smitis
Благодарю за наводку...
Но не откажусь от примерчиков в батнике(для тех кто это сможет написать)
Автор: Zubov1
Дата сообщения: 27.08.2008 04:58
01MDM

Спасибо тебе большое. У меня похожий был тока не работал. А этот что надо. Еще раз Спасибо.
Автор: Smitis
Дата сообщения: 27.08.2008 12:55
Kilich
Очень примерно:

Код:
@echo off
set "hk_wl=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
:: Включить autologon
reg add "%hk_wl%" /v AutoAdminLogon /t REG_SZ /d 1 /f
:: Чтобы работало и при LogOff, а не только при перезагрузке
reg add "%hk_wl%" /v ForceAutoLogon /t REG_SZ /d 1 /f
:: Количество автоматических входов, после которого autologon будет отключен
:: (закоментировано, т.е. при logoff не используется)
::reg add "%hk_wl%" /v AutoLogonCount /t REG_DWORD /d 1 /f
:: Имя пользователя
reg add "%hk_wl%" /v DefaultUserName /t REG_SZ /d User /f
:: Пароль
reg add "%hk_wl%" /v DefaultPassword /t REG_SZ /d 12345 /f
:: Домен ???
::reg add "%hk_wl%" /v DefaultDomainName /t REG_SZ /d Domen /f

:: Перезагрузка
::shutdown -r -t 0
:: или LogOff
shutdown -l
exit
Автор: igor_andreev
Дата сообщения: 27.08.2008 14:07
Kilich
Есть вот такая утилита http://www.softtreetech.com/24x7/archive/51.htm
Не подойдет тебе? Про домен ничего не написано правда. Сам не пользовался и не пробовал.
Автор: azamapendrus
Дата сообщения: 27.08.2008 14:41
Задача :
Во всех файлах *.txt (находящихся в разных директориях) во всех строках после знака " ? " вставило бы текст "Ответ на вопрос :"

Пример :
........... во сколько раз? Ответ на вопрос: Исключение из правил...........
Автор: 01MDM
Дата сообщения: 28.08.2008 04:39
azamapendrus

Цитата:
Пример :
........... во сколько раз? Ответ на вопрос: Исключение из правил...........


Не лучшее решение при помощи голого батника парсить текст
Вариант с потерей возможного форматирования (отступы, пустые строки, знаки "%" и другие непредвиденные ошибки).

Код:
@echo off
setlocal
chcp 1251 1>nul

for /f "tokens=*" %%i in ('dir /b /s "test\*.txt"') do call:parse "%%i"
goto:eof

:parse
for /f "tokens=*" %%i in ('type %1') do call:paste "%%i"
for /f "tokens=2* delims==" %%i in ('set string_') do (
echo %%i %%j 1>>"%~1.tmp"
)
move /y "%~1.tmp" %1
set cnt=
set string=
goto:eof

:paste
set /a cnt+=1
set cnt=000%cnt%
set cnt=%cnt:~-4%

set "string=%~1"
set "string=%string:?=? Ответ на вопрос:%"

set "string_%cnt%=%string%"

Автор: mozers
Дата сообщения: 28.08.2008 12:50
чет туплю по-страшному...
Есть строка с разными путями через точкасзапятой (количество может быть любым!)
Надо вывести все пути последовательно. Как???
Код: @ECHO OFF
SET MINGW=C:\MinGW\bin;%ProgramFiles%\CodeBlocks\bin
ECHO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
FOR %%d IN (%MINGW%) DO echo %%d
ECHO
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
FOR /F "usebackq delims=;" %%d IN ('%MINGW%') DO echo %%d
ECHO
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
FOR /F "delims=;" %%d IN ("%MINGW%") DO echo %%d
ECHO
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Автор: azamapendrus
Дата сообщения: 28.08.2008 12:52
Очень даже классно получилось! Спасибо01MDM
Автор: DCT
Дата сообщения: 28.08.2008 14:43
Столкнулся с проблемой: нужно батником пропатчить dll-ку (записать пару байт по заданому смещению в файл, вне зависимости от его содержимого). Какой консольной утилитой это можно сделать? Т.е. нужно что нибудь типа команды:
write -offset FF -data FF -file mydll.dll
Смотрел на скомпиленный под винду юниксовый patch.exe - он вроде бы такого не умеет...
Автор: Elroir
Дата сообщения: 28.08.2008 15:00
mozers

Цитата:
Надо вывести все пути последовательно. Как???


Код:
@echo off
setlocal
SET MINGW=C:\MinGW\bin;%ProgramFiles%\CodeBlocks\bin
call :print "%MINGW%"
goto :EOF
:print
if "%~1"=="" goto :EOF
for /f "tokens=1,* delims=;" %%a in ("%~1") do (echo %%a & call :print "%%b")
Автор: DCT
Дата сообщения: 28.08.2008 17:03
Сам спрашивал, сам себе и отвечаю
http://www.kuwanger.net/hexalter.zip
Именно то, что я искал!
Автор: vitrzn
Дата сообщения: 28.08.2008 18:03
есть много батников (более 30шт)
в них надо заменить путь,
был T:\CD надо T:\vit\CD

Можно ли это сделать?
А то батник который для "mozers" попробовал и не получилось ( (я не смог корректно отредактировать)


И ещё!
можно ли задать такой алгоритм, чтобы батник искал на флешке (путь один и тот-же) T:\vit\cd\..... (много папок внутри)
и скопировал в папку C:\temp все файлы , с датой ранее чем -14 дней от текущей даты (сегодня 28-08-08, соот. файлы позднее чем 14-08-08) но список файлов какие надо скопировать батник будет брать из файла C:\Temp\Base.txt

ARB#DD0725#0001.ANS

формат файлов ACN#0725#*.ANS , AMS#DD0725#*.ANS , ARB#DD0725#*.ANS ( DD0725 - это дата)
а формат файла Base.txt (ну можно и др. формат задать, но то что там будет это список - это точно)
Acn
Ams
Arb
Автор: 01MDM
Дата сообщения: 28.08.2008 18:23
vitrzn

Цитата:
есть много батников (более 30шт)



Код:
sed -i "s;T:\\CD;T:\\vit\\CD;g" *.cmd
Автор: DCT
Дата сообщения: 28.08.2008 18:37
Может немножко не в тему, но я для таких вещей использую vbs-скрипт, прикрученный на кнопку Total Commander-а:
http://forum.wincmd.ru/viewtopic.php?t=977&start=45&sid=46399dad895d0db6d712b0e62554fdb3
как это происходит:делаю поиск по шаблону, файлы на панель, выделить все, нажимаешь на кнопочку - вводишь что менять, на что менять - готово!

Из комстроки (в батнике надо ставить вместо % %%)
создать листинг всех файлов с полными путями (к примеру !list) далее
for /f %i in (!list) do sed –in-place “s/T:\\CD/T:\\vit\\CD/g” %i
Автор: 28Diman89
Дата сообщения: 28.08.2008 23:45
всем добртго времени суток!
следующая проблема: нужны 4 батника
1) надо загрузить с http файл с с определенным именем (например с http://mysite.ru файл zzz.txt ну и положить его куда нить на диск С)
2) надо загрузить с ftp с файл с определенным именем (например с ftp://mysite.ru файл zzz.txt ну и положить его куда нить на диск С)
3) надо загрузить с http группу файлов с одинаковым расширением (например с http://mysite.ru файлы *.zip ну и положить их куда нить на диск С)
4) надо загрузить с ftp группу файлов с одинаковым расширением (например с ftp://mysite.ru файлы *.zip ну и положить их куда нить на диск С)
кто может помочь плз!!!!!!! буду признателен. а еще лучше чтоб все 4 в 1))
если что вот ася 457844611

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172

Предыдущая тема: DVD-video (ДВД-видео) - что и как (часть 3)


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