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

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

Автор: soulthiefer
Дата сообщения: 30.10.2007 17:31
igor_andreev
спасибо за совет ! вставил!)))
Автор: m0ps
Дата сообщения: 30.10.2007 20:15
ребята, оч нужна ваша помощь в следующем:
предисловие
есть комп под WinXP SP2, на нем стоит Microsoft SQL Server. есть софтина, которая в своей работе использует SQL базу (хранит в ней даннные).
задача
необходимо что бы перед запуском софтины происходило резервное копирование базы средствами WinRar'a.
принцип работы, я так понимаю, должен быть следующий:
человек запускает батник, который вначале останавливает MS SQL Server, потом создаеться резервная копия, после чего SQL Server опять стартует, а потом уже запускается софтина.
в плане резервирования средствами винрара у меня вопросов нет, но вот как из коммандной строки остановить/запустить Microsoft SQL Server?
Автор: freeminded
Дата сообщения: 31.10.2007 08:21
подскажите как написать батник который бы заменял пробелы в именах файлов нижней чертой _ в директории, в которой запускается батник.

Вот пример имени:

(01) [Berliner Philharmoniker - Karl Böhm] Sinfonie Nr. 26 in Es-Dur, KV 184 - I. Molto presto.ape

нужно:
(01)_[Berliner_Philharmoniker_-_Karl_Böhm]_Sinfonie_Nr._26_in_Es-Dur,_KV_184_-_I._Molto_presto.ape

Автор: Elroir
Дата сообщения: 31.10.2007 09:22
freeminded

Код:
@echo off
setlocal
for %%a in (*.*) do call :renfile "%%a"
goto :EOF
:renfile
set "file=%~1"
set "file=%file: =_%"
if not "%file%"=="%~1" ren "%~1" "%file%"
Автор: 01MDM
Дата сообщения: 31.10.2007 09:24
freeminded

Код:
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b') do (
set "oldname=%%i"
set "newname=!oldname: =_!"    
rename "%%i" !newname!
)
Автор: Elroir
Дата сообщения: 31.10.2007 09:30
01MDM
Я сначала тоже так написал (все в for-е)
Но потом подумал о возможных проблемах с восклицательным знаком в именах файлов и переделал.
Автор: 01MDM
Дата сообщения: 31.10.2007 09:36
Elroir
Я не думал. Я думал о том почему вылазит ошибка. О кавычках я забыл напрочь
Автор: freeminded
Дата сообщения: 31.10.2007 10:38
всем спасибо. сегодня вечером проверю.

Добавлено:

Цитата:
@echo off
setlocal
for %%a in (*.*) do call :renfile "%%a"
goto :EOF
:renfile
set "file=%~1"
set "file=%file: =_%"
if not "%file%"=="%~1" ren "%~1" "%file%"


этот мне помог (нашел на работе папочку... ), чудесно работает. Еще раз спасибо

Автор: Maza Faka
Дата сообщения: 31.10.2007 10:50
freeminded
А если файлов много и они большого размера, то быстрее будет использовать стороннюю утилиту gsar.exe

Код:
@echo off
for %%a in (*.*) do gsar -s" " -r"_" -o "%%a"
Автор: Elroir
Дата сообщения: 31.10.2007 10:53
Maza Faka
А при чем тут размер?

Добавлено:
А... ты неправильно вопрос понял. Речь шла о именах файлов, а не о содержимом.
Автор: soulthiefer
Дата сообщения: 31.10.2007 11:27
подскажите плз как в батнике сделать бесконечный цикл ?
Автор: Elroir
Дата сообщения: 31.10.2007 11:34
soulthiefer

Код:
:loop
echo Endless loop
goto loop
Автор: Tipulatoid
Дата сообщения: 31.10.2007 12:58
soulthiefer
или еще
Код: @echo off
for /l %%a in (0,0,1) do (
echo Бесконечный цикл
)
Автор: freeminded
Дата сообщения: 31.10.2007 13:58
а реально ли в цикле не только добавить _ а еще и сократить имя?



Цитата:
(01) [Berliner Philharmoniker - Karl Böhm] Sinfonie Nr. 26 in Es-Dur, KV 184 - I. Molto presto.ape

до

(01)_Sinfonie_Nr._26_in_Es-Dur,_KV_184_-_I._Molto_presto.ape
Автор: KapralBel
Дата сообщения: 31.10.2007 15:09
freeminded
По каким правилам сокращение?
Автор: freeminded
Дата сообщения: 31.10.2007 15:20
убирать то что в квадратных скобках.

Добавлено:
главная задача - пробелы. не должно быть ниодного пробела.

в имени каждого файла есть общее [Berliner Philharmoniker - Karl Bm], - и это лишнее.
Автор: apexxx
Дата сообщения: 31.10.2007 17:27
Написал такой батник:

Код: @ECHO off
ECHO %DATE:~-10% %TIME%" >> c:\tmp\linev.log
apcaccess | findstr /B "LINEV" >> c:\tmp\linev.log
Автор: igor_andreev
Дата сообщения: 31.10.2007 18:43
apexxx

Код:
type old.txt| sed "N;s/\n/ /">new.txt
Автор: Elroir
Дата сообщения: 31.10.2007 20:20
apexxx
Способ igor_andreev-а подходит, если файл уже создан.
А чтобы сразу записывалось в одну строку (без сторонних утилит), можно так:

Код:
@echo off
set /p=%DATE:~-10% %TIME% <nul>>"c:\tmp\linev.log"
apcaccess | findstr /B "LINEV" >> "c:\tmp\linev.log"
Автор: apexxx
Дата сообщения: 01.11.2007 10:53
Большое спасибо всем ответившим

1----------------------------------------------------------------
прочитал вот это: http://forum.ru-board.com/topic.cgi?forum=62&topic=9040&start=1060#11

сделал файлик с названием QCHO.COM и таким содержимым:

Код: @ECHO OFF
> #.SCR ECHO N QCHO.COM
>>#.SCR ECHO E 0100 BB 80 00 43 80 3F 0D 75 FA C6 07 24 B4 09 BA 82
>>#.SCR ECHO E 0110 00 39 DA 7F 02 CD 21 B4 4C CD 21
>>#.SCR ECHO RCX
>>#.SCR ECHO 001B
>>#.SCR ECHO W
>>#.SCR ECHO Q
>>#.SCR ECHO.
DEBUG<#.SCR>NUL
DEL #.SCR
Автор: aChikatillo
Дата сообщения: 01.11.2007 13:41
Есть батник(net use \\1c-base 1 /user:user),поставил его в автозагрузку, проблема в том что при загрузке он запускается но подключение к ресурсу не происходит(видимо из-за того он сразу стартует а сетевые сервисы еще не успели запуститься).
Помогите как решить данную проблему. Может быть есть какие-то команды которые делаю задержку перед выполнением...
Автор: KapralBel
Дата сообщения: 01.11.2007 13:45
aChikatillo
1. for /l %%a in (1,1,1000) Do Echo %%a >Nul
2. Подключи в ручную с флажком запоминать при перезагрузке
Автор: aChikatillo
Дата сообщения: 01.11.2007 14:32

Цитата:
KapralBel

Вообщем помогло когда поставил вместо 1000 - 20000
Как бы терь скрыть это от глаз юзера, а то у него паника начнется ?
Может эт как нить мона зделать без цикла, а то на разных процессорах , время будет по разному...?
Автор: KapralBel
Дата сообщения: 01.11.2007 14:50
aChikatillo
1. Windows 2003 - waitfor /?
2. cmdow — изменение параметров и видимости дос-окна
Автор: Elroir
Дата сообщения: 01.11.2007 23:10
freeminded

Цитата:
а реально ли в цикле не только добавить _ а еще и сократить имя?

Реально:

Код:
@echo off
setlocal
for %%a in (*.*) do call :renfile "%%a"
goto :EOF
:renfile
for /f "tokens=1,2* delims=[]" %%b in (%1) do set "file=%%b%%d"
set "file=%file: = %"
set "file=%file: =_%"
if not "%file%"=="%~1" ren "%~1" "%file%"
Автор: freeminded
Дата сообщения: 02.11.2007 08:39

Цитата:

Реально:

Код:

Цитата: @echo off
setlocal
for %%a in (*.*) do call :renfile "%%a"
goto :EOF
:renfile
for /f "tokens=1,2* delims=[]" %%b in (%1) do set "file=%%b%%d"
set "file=%file: = %"
set "file=%file: =_%"
if not "%file%"=="%~1" ren "%~1" "%file%"

Автор: root1976
Дата сообщения: 02.11.2007 09:47
Есть файл вида 1111_???.222
Его нужно переименовать в
00_???w.222
где ??? - число которое менять не нужно, оно должно остаться.
Заранее спасибо!

Добавлено:
Большое спасибо....... мне уже помогли!!!!!!
Моя благодарность не знает граниЦ!
Автор: Elroir
Дата сообщения: 03.11.2007 16:36
freeminded

Цитата:
еще бы разобратся как он (код) исполняет нужное

Давай разбираться :
Первый цикл for идет по всем файлам в текущей директории и для каждого вызывает виртуальный батник :renfile, передавая ему в качестве аргумента имя этого файла.
Внутри :renfile - цикл for в первой строке позволяет разделить переданное имя файла на 3 части - до символа "[", после "[" и до "]", после символа "]". Первая и третья части соединяются и записываются в переменную file ( set "file=%%b%%d" ).
Так как до "[" и после "]" в оригинальном названии были пробелы, в новом названии ( в переменной), в месте соединения частей у нас оказались два пробела подряд. Чтобы от них избавиться, обрабатываем переменную file - запускаем следующую команду set "file=%file: = %", то есть заменяем любые два пробела идущие один за другим (два пробела до знака "=") на один пробел (после знака "="). Теперь займемся заменой пробелов на знаки подчеркиванья - set "file=%file: =_%", используется та же конструкция, заменяем " " на "_". После этого в переменной файл у нас то название, которое нам и было нужно.
На всякий случай проверяем отличается ли название в переменной от оригинального названия (мало ли - может там и не было пробелов и квадратных скобок) и если отличается - переименовываем файл.
Автор: freeminded
Дата сообщения: 05.11.2007 08:44

Цитата:
Давай разбираться :
Первый цикл for идет по всем файлам в текущей директории и для каждого вызывает виртуальный батник :renfile, передавая ему в качестве аргумента имя этого файла.
Внутри :renfile - цикл for в первой строке позволяет разделить переданное имя файла на 3 части - до символа "[", после "[" и до "]", после символа "]". Первая и третья части соединяются и записываются в переменную file ( set "file=%%b%%d" ).
Так как до "[" и после "]" в оригинальном названии были пробелы, в новом названии ( в переменной), в месте соединения частей у нас оказались два пробела подряд. Чтобы от них избавиться, обрабатываем переменную file - запускаем следующую команду set "file=%file: = %", то есть заменяем любые два пробела идущие один за другим (два пробела до знака "=") на один пробел (после знака "="). Теперь займемся заменой пробелов на знаки подчеркиванья - set "file=%file: =_%", используется та же конструкция, заменяем " " на "_". После этого в переменной файл у нас то название, которое нам и было нужно.
На всякий случай проверяем отличается ли название в переменной от оригинального названия (мало ли - может там и не было пробелов и квадратных скобок) и если отличается - переименовываем файл.

... да... черт ногу сломит....
Автор: Aldares
Дата сообщения: 06.11.2007 06:46
Помогите определить доступность диска .
есть в батнике команда
for /D %%d 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 %%d:\autorun.inf.tmp attrib -s -h -r %%d:\autorun.* & del %%d:\autorun.*
Если диска с такой буквой просто нет, то все нормально .
Если в машинке стоит кардридер - есть несколько съемных дисков, которые недоступны, пока не сунешь в них карточку, при обращении к ним винда вываливает окошко "диск недоступен ок/отмена/повторить" . Соответственно, если нужно обратиться к каждому из дисков раз по 10, приходится нажимать давить кнопку "отмена" ~50 раз .
Я предполагаю сделать что-то типа for /D %%d 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 dir %%d: , проверить errorlevel и собрать новую строку из доступных дисков, но чего-то не получается - эррорлевел всегда или 1 или 0, хотя должен быть своим для каждой команды .

Нашел
Commands CLS, CD and DIR doesn't reset the current errorlevel, and other DOS commands returns their own errorlevels.
надо искать другой путь ..

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879

Предыдущая тема: Problemi s zagruzkoy XP!


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