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

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

Автор: mugil_cephalus
Дата сообщения: 09.11.2009 21:18
soft111
столько мучений и все напрасно
может кто знает уловку, но пока тупик (похоже нет способов выдрать строку)
я попробовал 2 способа:
D:\>(echo hi)>1

D:\>1>x echo hi

в обоих случаях в каждом файле добавляется лишняя пустая строка
Автор: soft111
Дата сообщения: 09.11.2009 21:23
mugil_cephalus, все равно спасибо за старания, подождем, может кто подскажет что надо добавить...
Автор: mugil_cephalus
Дата сообщения: 09.11.2009 21:37
soft111
думаю понадобится текстовый редактор с ф-цией удаления CR,LF
Автор: soft111
Дата сообщения: 09.11.2009 21:53
mugil_cephalus
Мне нужно, чтобы эти действия отрабатывались быстро и без моего участия, есть одна прога на примете, но у нее уходит время на обработку (100 файлов около 15 сек), через батник думаю намного быстрее бы получилось
Автор: king_stiven
Дата сообщения: 09.11.2009 22:00
soft111
mugil_cephalus

http://www.softboard.ru/index.php?act=Print&client=printer&f=13&t=34362

К сожалению, легко от знака перевода строки не избавиться. Проще всего использовать дополнительную утилиту. Прикладываю утилиту ech.exe, ее надо поместить в папку с батником. Для использования, в отличие от echo, надо выводимую строку заключать в кавычки,

http://www.softboard.ru/index.php?s=24a9f786fc8c03cda85dae61d60dcb51&act=Attach&type=post&id=8212

echo 1> 1.txt
echo 1 > 1.txt тут ещё и пробел добавляет
Автор: mugil_cephalus
Дата сообщения: 09.11.2009 22:10
king_stiven

Цитата:
К сожалению, легко от знака перевода строки не избавиться. Проще всего использовать дополнительную утилиту.

я, конечно, не poweruser в CLI, но, имхо, думаю, стандартными средствами - без сторонних утилит - не обойтись точно
Автор: sL4yer
Дата сообщения: 09.11.2009 22:27
допустим у меня есть каталог.
Например: C:\Folder\ и в нем множество вложенных папок. К-во и имя вложенных папок неизвестно. В каждой из этих папок есть папка "killme". А в папке "killme" хранятся различные файлы и папки.
Задача - вычистить папку "killme" или удалить.
Автор: king_stiven
Дата сообщения: 09.11.2009 23:25
soft111
mugil_cephalus
В шапке ещё
Альтернативные решения
Автор: 01MDM
Дата сообщения: 10.11.2009 08:33
king_stiven
mugil_cephalus

От знака перевода строки легко избавляет "set /p"

Код:
0>nul 1>file.txt set /p="Some string here"
Автор: king_stiven
Дата сообщения: 10.11.2009 09:53
sL4yer

Код: @echo off
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 (
if exist "%%i:\-= DIR =-" " REN "%%i:\-= DIR =-" "! DIR"
for /f "tokens=*" %%k in ('dir /b /s /a:d "%%i:\-= DIR =-" 2^>nul') do REN "%%k" "! DIR"
)
Автор: bigfoothart
Дата сообщения: 10.11.2009 10:38
mugil_cephalus


Цитата:

for /f "tokens=3" %%A in ('"net use \\192.168.0.10\c$ 111 /USER:admin"') do echo _%%A_


при успехе пишет " _успешно_ ", при ошибках, не выводит даже __ .

Ладно, пытаюсь реализовать свою идею:


Код:
@echo off
cd %~dp0
md logs
del logs\*.log log.txt
for /f %%i in (userlist.txt) do call :_1 %%i

del logs\*.log

:_1
net use \\%1\c$ pass /USER:admin >logs\%1.log 2>&1

findstr "1326" logs\%1.log
if errorlevel 0 echo %1 #1326 wrong login or pwd >>log.txt

findstr "67" logs\%1.log
if errorlevel 0 echo %1 #67 node not found >>log.txt

findstr "5" logs\%1.log
if errorlevel 0 echo %1 #5 access denied >>log.txt

findstr "64" logs\%1.log
if errorlevel 0 echo %1 #64 node not available >>log.txt

findstr "1219" logs\%1.log
if errorlevel 0 echo %1 #1219 no more than 1 user >>log.txt

::psexec.exe \\%1 -u admin -p pass soft.bat

goto :eof
Автор: dvcher
Дата сообщения: 10.11.2009 12:59
Народ помогите, данный вопрос уже не раз проскакивал но не где не был дан ответ.
Сам ток начал изучать батники и скриптовое дело но мозгов пока не хватает для решения данной задачи.
1. Разработать командный файл, который формировал бы ежемесячный отчет об изменениях в рабочем каталоге (файлы созданные, удаленные). Необходимо хранить список файлов в файле истории.
2. Выполняющий в зависимости от ключа один из 3-х вариантов работы:
- с ключом /n дописывает в начало указанных текстовых файлов строку с именем текущего файла;
- с ключом /b создает резервные копии указанных файлов;
- с ключом /d удаляет указанные файлы после предупреждения.
Количество обрабатываемых файлов может быть переменным и задаваться в качестве параметров.

Автор: Maximus777
Дата сообщения: 10.11.2009 14:25
Подскажите плиз, первый раз почему-то всегда errorlevel=0, хотя файла нет на сервере. Как избавиться от этого? У меня в файле прописаны несколько зеркал, батник должен просмотреть их все и если где-то найден файл, то закачать его.

Код: ::----- Проверяем наличие файла на серваке -----
for /F %%S in (%DltDir%\DServers.ini) do (
Wget\wget --append-output=log.txt --spider http://%%S/delta/v5/pr/pr0%Last%.dlt
if %errorlevel%==0 (
echo %Last%>%DltDir%\dlt.ini
goto answer0
)
)
Автор: king_stiven
Дата сообщения: 10.11.2009 14:32
Maximus777
может так
if errorlevel 0 (
или

If not errorlevel 1 (


Добавлено:
bigfoothart
Он у тебя

Цитата:
findstr "64" logs\%1.log


Цитата:
findstr "1219" logs\%1.log

это что делает?

findstr "64" logs\%1.log && команда
Автор: wolf0425
Дата сообщения: 10.11.2009 14:40
Maximus777
Цитата:
Подскажите плиз, первый раз почему-то всегда errorlevel=0

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

или выноси тело цикла в подпрограмму
или переходи на !переменные!
или используй вариант If not errorlevel 1 (


Цитата:
может так
if errorlevel 0 (

блин... от тебя уже не ожидал такой ереси
на досуге попытайся предсказать что будет результатом выполнения команд
md ..
if errorlevel 0 echo =%errorlevel%=
а после проверки вспомнить где написано - почему так
Автор: sL4yer
Дата сообщения: 10.11.2009 15:04
king_stiven

есть:
C:\Folder\"random folder name 1"\killme\
C:\Folder\"random folder name 2"\killme\
C:\Folder\"random folder name n"\killme\

random folder name - название папки (нам неизвестно).
n - кол-во папок (тоже неизвестно).

в папках random folder name есть и другие папки помимо killme.

Нужно из всех этих папок (random folder name 1, 2, ... , n) удалить папку killme.
Автор: king_stiven
Дата сообщения: 10.11.2009 15:22
wolf0425
Пишу в режиме нон стопа, пусть чел сам попробует варианты, если время есть разжуй и в рот положи

Добавлено:
sL4yer
Попроси wolf0425, пусть до ума доведёт.
Автор: ArtemT
Дата сообщения: 10.11.2009 15:27
Ребят подскажите можноли зделать такую вещь...
Прописваю на терминальном сервере путь к ЕХЕ 1с нужно чтоб он после входа терминального клиента запускался с правами Администратора....
Нехочу давать пользователям доступ к рабочему столу и темболее говорить пароль админа
(Проблема в связи с переходм на сервер 2008 и 1с 7.7)
Автор: king_stiven
Дата сообщения: 10.11.2009 15:39
Maximus777
проверять наличие файла можно так
if exist "файл" (
Автор: mugil_cephalus
Дата сообщения: 10.11.2009 16:54
wolf0425
подскажи, пожалста, в этом коде:
echo on
for %%A in (C:\test\*.txt) do call:_1 %%A
goto :eof

:_1
for /f "tokens=*" %%i in ('type %1') do (echo %%i>C:\test\%~n1_.txt && del /q %1 && ren C:\test\%~n1_.txt %~nx1)
goto :eof

при старте первого цикла формируется виртуальный/эмулированный пул ВСЕХ итераторов (то есть виртуальный list всех *.txt) ? или нет и тогда "созданный" во втором цикле
лексемой - ren C:\test\%~n1_.txt %~nx1 - *.txt-файл попадет в первый цикл?

soft111
если не ошибаюсь, то скрипт "выдирает" таки пустую строку из source файла (см. ниже мой листинг (command-line mode cmd-shell; файл w:\1.txt содержит строку _text_ и еще пустую строку)), а пустая строка добавляется на этапе вывода в target файл, конкретно - в лексеме do (echo %%i>C:\test\%~n1_.txt Обход этой проблемы штатными средствами CLI предлагает 01MDM

Цитата:
От знака перевода строки легко избавляет "set /p"

Код:
0>nul 1>file.txt set /p="Some string here"


листинг:
W:\>for /f "tokens=*" %i in ('type w:\1.txt') do echo %i

W:\>echo _text_
_text_

W:\>

Автор: wolf0425
Дата сообщения: 10.11.2009 23:24
king_stiven

Цитата:
Пишу в режиме нон стопа
Это ни разу не объясняет детской ошибки

mugil_cephalus

Цитата:
подскажи, пожалста, в этом коде:
честно говоря - без понятия. проверь
Мне придумывать как проверять - лень, я бы написал чтоб точно не попал
for /f "delims=" %%A in ('dir /b /a-d C:\test\*.txt') do call:_1 %%A


Цитата:
если не ошибаюсь, то скрипт "выдирает" таки пустую строку из source файла

напечатай что-то после выхода из цикла да посмотри.



Добавлено:
sL4yer

Цитата:
C:\Folder\"random folder name n"\killme\
Нужно из всех этих папок (random folder name 1, 2, ... , n) удалить папку killme.

удалить надо из всех папок, лежащих в C:\Folder\, или только из тех, чье имя на цифру заканчивается ?

первое тривиально for /d %%a in ( C:\Folder\* ) do rd /q /s "%%a\killme"
для второго - лучше формализуй исключения
Автор: sL4yer
Дата сообщения: 11.11.2009 00:25
wolf0425


Цитата:
for /d %%a in ( C:\Folder\* ) do rd /q /y "%%a\killme"


то, что нужно . Спасибо

P. S. маленькая поправочка for /d %%a in ( C:\Folder\* ) do rd /q /s "%%a\killme"
Автор: Maximus777
Дата сообщения: 11.11.2009 05:33

Цитата:
проверять наличие файла можно так
if exist "файл" (

Файл то через интернет проверяется. Про exist я знаю.


Цитата:
или используй вариант If not errorlevel 1 (

Вот это мне подходит в самый раз.

Спасибо всем за ответы.
Автор: mugil_cephalus
Дата сообщения: 11.11.2009 09:26
wolf0425

Цитата:
Цитата:если не ошибаюсь, то скрипт "выдирает" таки пустую строку из source файла

напечатай что-то после выхода из цикла да посмотри.



Код:
echo on
for /f "tokens=*" %%i in ('type w:\1.txt') do echo %%i
date /t
Автор: Uruloke
Дата сообщения: 11.11.2009 11:28
Посмотрел все, что было по дате/времени, но решения не придумал.
Надо удалять каталоги более чем недельной (допустим) давности. Два варианта: либо смотреть по дате создания, либо смотреть по имени вида arc_ddmmyyhhmmss.
Что можете подсказать?
Автор: king_stiven
Дата сообщения: 11.11.2009 12:23
Uruloke
А в шапке?
http://forum.ru-board.com/topic.cgi?forum=62&topic=17154&start=379&limit=1&m=1#1
Автор: dvcher
Дата сообщения: 11.11.2009 12:26

Цитата:
Народ помогите, данный вопрос уже не раз проскакивал но не где не был дан ответ.
Сам ток начал изучать батники и скриптовое дело но мозгов пока не хватает для решения данной задачи.
1. Разработать командный файл, который формировал бы ежемесячный отчет об изменениях в рабочем каталоге (файлы созданные, удаленные). Необходимо хранить список файлов в файле истории.
2. Выполняющий в зависимости от ключа один из 3-х вариантов работы:
- с ключом /n дописывает в начало указанных текстовых файлов строку с именем текущего файла;
- с ключом /b создает резервные копии указанных файлов;
- с ключом /d удаляет указанные файлы после предупреждения.
Количество обрабатываемых файлов может быть переменным и задаваться в качестве параметров.


первый вопрос решил вроде, а вот со 2-м как добавлять параметры к батнику найти не могу
ВЫРУЧАЙТЕ
Автор: mugil_cephalus
Дата сообщения: 11.11.2009 12:50
01MDM

Цитата:
От знака перевода строки легко избавляет "set /p"

Код:
0>nul 1>file.txt set /p="Some string here"


а как это реализовать в батнике?
я попробовал след. код в консоли:

W:\>0>nul 1>d set /p=<s

файл d - пустой (в файле s - _text_ и пустая строка)

если с клавы вводить, то для 100.000 файлов трудно

Добавлено:
dvcher
if "%1" equ "n" чего делать
Автор: king_stiven
Дата сообщения: 11.11.2009 13:14
mugil_cephalus
Ты для себя спрашиваешь или кому помогаешь?
for /f "usebackq tokens=*" %%i in ("str.txt") do 0>nul 1>str.txt set /p="%%i"
только если в str.txt одна строка плюс перевод строки
Автор: 01MDM
Дата сообщения: 11.11.2009 13:20
mugil_cephalus

Цитата:
а как это реализовать в батнике?

Не понял с твоим примером:

Цитата:

0>nul 1>d set /p=<s

У меня все получается. Если в файл "d" надо записать "<s" то:

Код:
@echo off
0>nul 1>d set /p="<s"

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778

Предыдущая тема: во вкладке автозагрузка


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