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

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

Автор: Maza Faka
Дата сообщения: 22.05.2007 18:20
alfer1979

Код:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%a in (new.txt) do (
set string=%%a
echo !string:~0,50!>>outfile.txt)
Автор: euheny
Дата сообщения: 23.05.2007 03:40

Цитата:
Это можно сделать через реестр

Цитата:
переменная пропишется в реестре навсегда


А может кто знает ключи реестра , которые существуют ограниченное время , ну или хотябы удаляются после перезагрузки? Ну конечно же с минимальными правами доступа.

Elroir
NIKZZZZ

Хорошо , всё работает, правда если папок на диске очень много , особенно вложенных ...

Автор: Maza Faka
Дата сообщения: 23.05.2007 07:15
euheny

Цитата:
А может кто знает ключи реестра , которые существуют ограниченное время , ну или хотябы удаляются после перезагрузки?

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
Значения в этом разделе удаляются после перезагрузки.
Автор: GORA2
Дата сообщения: 23.05.2007 07:25
NIKZZZZ
Вы правы. Батник в темповой папке выглядит так
Код: @shift 1
@echo off
cd /d %MYFILES%
echo MYFILES=%MYFILES%
echo %%0=%0
echo %%1=%1
pause>nul
exit
Автор: NIKZZZZ
Дата сообщения: 23.05.2007 09:47
GORA2

Цитата:
Команда SHIFT при включении расширенной обработки команд поддерживает ключ /n, задающий начало сдвига параметров с номера n, где n может быть от 0 до 9.

Может в этом все дело?
Или должно быть Shift /1 ?
Автор: GORA2
Дата сообщения: 23.05.2007 10:01
NIKZZZZ
1
Цитата:
Или должно быть Shift /1 ?
Да кабы я добавлял эту команду сам. Ее в таком виде вставляет QBFC и изменить ее я не в силах.
2 На win XP та же строка обрабатывается и не ругается. Почему?
3 В демо режиме QBFC создает батник, который выглядит так
Код: @shift 1
echo off
cls
echo -----------------------------------------------------------------
echo This file created with trial version of Quick Batch File Compiler.
echo Copyright 2002-2005 by Abyssmedia.com
echo Offical web-site: http://www.abyssmedia.com
echo -----------------------------------------------------------------
pause
@echo off
echo %%0=%0
echo %%1=%1
cd /d "%MYFILES%"
echo MYFILES=%MYFILES%
echo %%0=%0
echo %%1=%1
pause>nul
EXIT
Автор: NIKZZZZ
Дата сообщения: 23.05.2007 10:32
GORA2

Цитата:
НЕ ругается на команду @shift 1!

Не ругается, из-за cls - она ругань стирает.

Цитата:
Как попробовать принудительно включить

Это описано в хелпе по cmd.exe. (cmd.exe /?)
Я посмотрю, у меня были проги, подобные QBFC, найду отпишусь.





Добавлено:
GORA2
Более продвинутая, чем QBFC прога. Когда-то даже пользовался, понравилась.
Автор: GORA2
Дата сообщения: 23.05.2007 12:52
NIKZZZZ
Спасибо, посмотрю.
Правда вроде бы удалось решить проблему неработоспособности моего батника (преобразованного в ехе с помощью QBFC) в win 2003 простым добавлением в него команды Shift /0.
Видимо все таки в win XP и win 2003 не одинаково обрабатывают "некорректную" команду Shift 1 !?
Автор: NIKZZZZ
Дата сообщения: 23.05.2007 17:42
GORA2

Цитата:
Правда вроде бы удалось решить проблему неработоспособности моего батника (преобразованного в ехе с помощью QBFC) в win 2003 простым добавлением в него команды Shift /0


Эта команда добавляется для того, чтобы сдвинуть аргументы. Батник запускается ив папки "%temp%", поэтому %0 укажет путь к этой папке. Чтобы путь был правильным (указывал на exe'шник), при запуске батника в качестве первого параметра добавляется путь и имя созданного екзешника, после которого идут нужные аргументы. Если ты не используешь аргументы командной строки, это не важно . В принципе, можно наплевать на ошибку "shift", добавив в батник правильный "shift" - "Shift" без /1 - он по умолчанию, но как будет отрабатываться твой ""Shift /0" не знаю. Это ошибка разработчиков QBFC.
Автор: alfer1979
Дата сообщения: 23.05.2007 20:42
Maza Faka

Цитата:
Код:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%a in (new.txt) do (
set string=%%a
echo !string:~0,50!>>outfile.txt)

У меня в файле сначало идут пробелы, например:
Информация
Можно сделать так что сначалва пробелы не удалялись?
Можно ли както это автоматически закидывать данные в Word или Excel?
Большое спасибо за помощь!

Автор: igor_andreev
Дата сообщения: 23.05.2007 21:46
alfer1979
Взять 50 символов каждой строки из файла file.txt и записать все это добро в newfile.txt :

gawk "{ printf(\"%%-50.50s\n\", $0) }" file.txt >newfile.txt

Если не из батника, а из командной строки - убрать один знак процента (%). С STDIN(|) gawk тоже умеет читать, можно конкретную строчку обрезать, если отдавать ему вывод sed.exe.
На всякий случай, если синтаксис не совпадет - gawk у меня этот (zip, 91,7 Kb).
Sed тоже такое умеет, только сейчас у меня пока не получилось почему-то правильно выражение составить, берет 50 последних символов и хоть ты ей тресни...

Цитата:
Можно ли както это автоматически закидывать данные в Word или Excel?

Windows Script Host по твоей задаче плачет

Автор: wolf0425
Дата сообщения: 23.05.2007 23:01
alfer1979

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

легко, например так
for /f "delims=" %%a in (new.txt) do set "string=%%a" & echo !string:~0,50!>>outfile.txt

примечание: табуляция считается за 1 символ.

вырезание нужных строк из файлов тоже можно было сделать через for, без привлечения sed...
Автор: igor_andreev
Дата сообщения: 23.05.2007 23:26

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

Можно. Но я не люблю и никому не рекомендую для "сурьезной" работы с текстом юзать FOR. Для мелких исправлений в INI или еще чем похожем - потянет. Предпочитаю или сторонние утилиты или .VBS. На больших файлах быстрее, чем с FOR, и корректнее работа со спецсимволами. Например в том, что предложил ты и Maza Faka с enabledelayedexpansion восклицательные знаки пропадают кудысь из string...


Добавлено:
Во, кажется получилось с SED. Взять из file.txt строчку под номером 15 и первые 50 символов из нее записать в newfile.txt:
sed -n "15p" file.txt | sed -e "s/\(.\{1,50\}\).*/\1/g" >newfile.txt
Поправьте, если ошибся.
Автор: Maza Faka
Дата сообщения: 24.05.2007 07:50
igor_andreev

Цитата:
с enabledelayedexpansion восклицательные знаки пропадают кудысь из string...

Ну это поправимо, немного исправленный код:

Код:
@echo off
for /f "delims=" %%a in (new.txt) do call :Sorting "%%a"
goto :eof

:Sorting
set string=%~1
echo %string:~0,50%>>outfile.txt
Автор: GreaseOD
Дата сообщения: 24.05.2007 08:04
Всем привет!! Задача организационного плана.
Есть много файлов *.bat Я хочу запускать основной файл который в свою очередь запускал бы их по порядку.Т.е проработал первый файл, закончил, начал работать второй файл, и т.д Я писал так, но работает только первый файл. Помогите плиз!!!!


Запускаю Start.bat (1.bat 2.bat 3.vbs)- внутри

call 1.bat
call 2.bat и. т.д
Автор: igor_andreev
Дата сообщения: 24.05.2007 10:34
Maza Faka

Цитата:
Ну это поправимо, немного исправленный код:

Угу, только знаки %^ пропадать стали Тоже поправимо конечно, если есть стопудовая уверенность, что батник ни на чем не споткнется, сам FOR пользуюсь...
Автор: JohnRD
Дата сообщения: 24.05.2007 10:35
добрый день

при запуске cmd с шары в сети, выдается следующее:
Указанный путь был использован при запуске CMD.EXE в качестве текущей папки.
CMD.EXE не поддерживает пути UNC. По умолчанию выбрана системная папка Windows.

такие не проходят
C:\WINDOWS>xcopy nav_del_dir.cmd c:\1\ /y
Не найден файл: nav_del_dir.cmd
Скопировано файлов: 0.

такие вроде да
C:\WINDOWS>reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce /v nav
_del_dir /t REG_SZ /d c:\1\nav_del_dir.cmd /f
Операция успешно завершена

почему?

каким образом можно запускать cmd из сетевой папки?

спасибо
Автор: KapralBel
Дата сообщения: 24.05.2007 10:39
JohnRD
А зачем запускать с шары?
запускай с лок. диска
или монтируюй шару на букву
Автор: Maza Faka
Дата сообщения: 24.05.2007 10:53
GreaseOD
Попробуй так: создаёшь батник с любым именем, только не Start.bat, например Start_.bat, и вписываешь туда примерно так:

Код:
@echo off
call 1.bat
call 2.bat
call 3.bat
..и т.д.
Автор: JohnRD
Дата сообщения: 24.05.2007 12:23
KapralBel

да пожулуй выход, спасибо.

от какого имени запустится c:\1\nav_del_dir.cmd - от того кто загрузится первым?
и как можно скрыть появление cmd после логина?

reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce /v nav
_del_dir /t REG_SZ /d c:\1\nav_del_dir.cmd /f

правильно ли будет выглядеть последняя строка чтобы удалить папку с:\1
c:\1\nav_del_dir.cmd

Код:
rmdir /s /q "C:\Program Files\Symantec"
rmdir /s /q "C:\Program Files\Symantec Antivirus"
rmdir /s /q "C:\Program Files\Common Files\Symantec Shared"
rmdir /s /q "C:\Documents and Settings\All Users\Application Data\Symantec"
rmdir /s /q с:\1
Автор: Elroir
Дата сообщения: 24.05.2007 12:36
GreaseOD
Проверь, чтобы ни в одном .bat файле не было команды "exit". Если есть такая - замени на "exit /b".
Автор: wolf0425
Дата сообщения: 24.05.2007 13:16

Цитата:
такие не проходят
C:\WINDOWS>xcopy nav_del_dir.cmd c:\1\ /y
Не найден файл: nav_del_dir.cmd
Скопировано файлов: 0.

логично что не проходят - в c:\windows наверно же нет nav_del_dir.cmd

ести nav_del_dir.cmd в той же папке, что и твой батник - для запуска батника из незамапленных шар впиши полный путь:
xcopy %~dp0\nav_del_dir.cmd c:\1\ /y
Автор: Maza Faka
Дата сообщения: 24.05.2007 13:34
JohnRD

Цитата:
от какого имени запустится c:\1\nav_del_dir.cmd - от того кто загрузится первым?

Если из "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce", то без разницы, потому, как настройки в "HKEY_LOCAL_MACHINE" являются общекомпьютерными и применяются для всех пользователей.


Цитата:
как можно скрыть появление cmd после логина?

Если .cmd будет прописан в "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce", то пользователь его не увидит, так, как .cmd будет исполнен до запуска графической оболочки.
Автор: JohnRD
Дата сообщения: 24.05.2007 13:40
Maza Faka

Цитата:
Если .cmd будет прописан в "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce", то пользователь его не увидит, так, как .cmd будет исполнен до запуска графической оболочки.


пользователь видит исполнение cmd, - я проверил, почему и спрашиваю
как будто ждет логина чьего нибудь..
и все же от какого имени запускается?
Автор: sdaww
Дата сообщения: 24.05.2007 13:47
Подскажите пожалуйста. С помощью команды Cacls меняю разрешения пользователям. Как избавиться от подтверждения, которого требует команда после каждого ее запуска?
Автор: GreaseOD
Дата сообщения: 24.05.2007 14:16
Maza Faka
Я так и делаю, как ты написал, но срабатывает только 1.bat и все. Ни в одном файле не сущестует команда "exit" Опишу подробнее:
1.bat - узнает текущую дату, приводит ее к нужному формату и заменяет в 6 файлах *.sql старую дату на новою!!!

2.bat - заменяет в 3 -х файлах *.sql дату со смещением на один в перед /Например: было - ('200701','2000702') и стало ('200702','2000703)

3.vbs - (генерит переменную с данными типа ('200701','2000702' и до сегодняшнего месяца и вставляет в *.sql ))
Автор: KapralBel
Дата сообщения: 24.05.2007 14:23
GreaseOD
Боюсь придется выкладывать батнички, что бы понять в чем глюк
Автор: GreaseOD
Дата сообщения: 24.05.2007 15:06

Цитата:
GreaseOD
Боюсь придется выкладывать батнички, что бы понять в чем глюк

Я вроде немного понял где ошибка, а вот как ее исправить?????

Если создаешь от балды основной бат то все работает!!!))))) Точно также я использую свой запускной файл

qwe.bat
call 1.bat
call 2.bat
call 3.bat

1.bat
echo 1.bat

2.bat
echo 2.bat

3.bat
echo 3.bat


НО Я В 1.BAT ИСПОЛЬЗУЮ SSED.EXE (РЕДАКТОР ТЕКСТОВЫХ ФАЙЛО) Т.Е

Ошибка в том что я его запуская просто без всяких параметров !!

Вот код одного файла после которого ты и я ничего не запустишь!!__)))
@echo off
path="D:\Statistic_sql\System";
set A=D:\Statistic_sql\System\model\12
set B=D:\Statistic_sql\Query\Pmagraym
set C=D:\Statistic_sql\System
set s=sql
cd last
dir /O:N /B>%C%\list12last.txt
cd ..
for /F %%i in (list12last.txt) do @Call :Rena %%i
GoTo :Re
:Rena
ssed.exe -f %C%\f.sed %C%\last\%1>%B%\%1
GoTo :EOF
:Re
del /q %C%\list12last.txt
GoTo :EOF
:EOF
Автор: KapralBel
Дата сообщения: 24.05.2007 15:14
GreaseOD
Скорее всего этот ссед стек вызовов и уничтожает (попробуй закоментировать эту строку)
Автор: wolf0425
Дата сообщения: 24.05.2007 15:42
sdaww
Цитата:
как избавиться от подтверждения, которого требует команда после каждого ее запуска?

Код: echo y|Cacls file.txt /g BUILTIN\Пользователи:F

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

Предыдущая тема: Автозагрузка терминальной сессии


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