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

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

Автор: finupr
Дата сообщения: 13.06.2011 11:53

Автор: fire4x
Дата сообщения: 13.06.2011 13:40
res2001

Цитата:
dir /a:d /b c:\windows\* >dirs.txt


Спасибо. А я тщетно пытался переделать "пример с реестром"...

А как сделать, чтобы название папки записалось в файле в определенном месте (строка 5, позиция 10)?
Как сделать, чтобы название папки записалось в файле вместо определенного слова?

Код: dir /a:d /b "c:\windows\*_32" >dirs.txt
Автор: vlary
Дата сообщения: 13.06.2011 14:07
fire4x
Цитата:
А как сделать, чтобы название папки записалось в файле в определенном месте (строка 5, позиция 10)?
Как сделать, чтобы название папки записалось в файле вместо определенного слова?
А никак. Если бы подобные вещи были возможны, народ бы забросил языки программирования, и все писал бы на бат-файлах.
Так что если хочется странного, пиши программу на c++/c#/vb и делай там с файлами что душе угодно...

Автор: res2001
Дата сообщения: 13.06.2011 14:28
vlary

Цитата:
А никак. Если бы подобные вещи были возможны, народ бы забросил языки программирования, и все писал бы на бат-файлах.

Ну почему же никак, на это спец.утилиты есть - sedом запросто.
fire4x

Цитата:
Как сделать, чтобы название папки записалось в файле вместо определенного слова?

Используй утилиту sed, найдешь ее в шапке, примеры использования ищи в этой ветке, открой "версию для печати и поищи.

Цитата:
А как сделать, чтобы название папки записалось в файле в определенном месте (строка 5, позиция 10)?

Можно и это, но "технологичнее" - "вместо определенного слова".
Автор: fire4x
Дата сообщения: 13.06.2011 14:30
vlary

Цитата:
Так что если хочется странного, пиши программу на c++/c#/vb и делай там с файлами что душе угодно...

Увы, языками программирования не владею.

Цитата:
Цитата:А как сделать, чтобы название папки записалось в файле в определенном месте (строка 5, позиция 10)?
Как сделать, чтобы название папки записалось в файле вместо определенного слова?


А никак. Если бы подобные вещи были возможны, народ бы забросил языки программирования, и все писал бы на бат-файлах.

А возможно ли с помощью бат-файла объединить допустим 3 текстовых файла в один следующим образом:
1.txt (содержимое файла: 123)
2.txt (содержимое файла: 456)
3.txt (содержимое файла: 789)
чтобы получить файл
4.txt с содержимым: 123456789
Автор: Elroir
Дата сообщения: 13.06.2011 17:04
fire4x

Цитата:
А возможно ли с помощью бат-файла объединить допустим 3 текстовых файла в один следующим образом

Возможно, но при определенном условии - в каждом из файлов 1.txt, 2.txt, 3.txt только одна строка. В любом случае, берется только первая строка из каждого файла.


Код:
@echo off
setlocal
del /f/q 4.txt 2>nul
for %%a in (1.txt 2.txt 3.txt) do (
call :add "%%a"
)
goto :EOF
:add
set /p fileText=<%~1
set /p=%fileText%<nul>>4.txt
Автор: fire4x
Дата сообщения: 13.06.2011 18:54

Цитата:
Код:
@echo off
setlocal
del /f/q 4.txt 2>nul
for %%a in (1.txt 2.txt 3.txt) do (
call :add "%%a"
)
goto :EOF
:add
set /p fileText=<%~1
set /p=%fileText%<nul>>4.txt

Данный код не хочет учитывать пустые строки (т.е. если файл с пустой строкой, то она не учитывается).

Как сделать, чтобы для каждого из 3-х файлов можно было-бы выбирать добавлять текст в эту-же строку или начинать с новой?
А возможно ли преобразовать код таким образом, чтобы для каждого из 3-х файлов можно было-бы выбирать номер строки, которую нужно добавлять в файл?

P.S. "del /f/q 4.txt 2>nul" - что делает "2>nul" ?
Автор: 01MDM
Дата сообщения: 13.06.2011 19:46
fire4x

Цитата:
Как сделать, чтобы для каждого из 3-х файлов можно было-бы выбирать добавлять текст в эту-же строку или начинать с новой?
А возможно ли преобразовать код таким образом, чтобы для каждого из 3-х файлов можно было-бы выбирать номер строки, которую нужно добавлять в файл?

Все это можно. Но надо ставить вопрос конкретно. Ты с каждым ответом добавляешь новые вопросы. Сначала подумай что ты хочешь.

Автор: fire4x
Дата сообщения: 13.06.2011 21:40
01MDM

Цитата:
Цитата:Как сделать, чтобы для каждого из 3-х файлов можно было-бы выбирать добавлять текст в эту-же строку или начинать с новой?
А возможно ли преобразовать код таким образом, чтобы для каждого из 3-х файлов можно было-бы выбирать номер строки, которую нужно добавлять в файл?


Все это можно. Но надо ставить вопрос конкретно.


Чтобы впоследствии не переспрашивать многократно о каждой вариации, мне интересны оба вышеуказанных варианта.


Цитата:
Ты с каждым ответом добавляешь новые вопросы. Сначала подумай что ты хочешь.

При решении новых задач зачастую возникают и новые вопросы (пока моих умений хватает только на самое простенькое). Ну и в процессе испытания предложенных решений порой возникают непредвиденные нестыковки при практическом применении - сначала пытаюсь решить их своими усилиями.


Цитата:
Цитата:Код:
@echo off
setlocal
del /f/q 4.txt 2>nul
for %%a in (1.txt 2.txt 3.txt) do (
call :add "%%a"
)
goto :EOF
:add
set /p fileText=<%~1
set /p=%fileText%<nul>>4.txt

Как в данном примере обойтись без "goto :EOF"? После дописывания строк в конец добавляется только первый файл.
Автор: lexikon4ik
Дата сообщения: 13.06.2011 22:36
здрасте ^^
такая ситуация: есть скрипт php который чекает порт бесконечно
как запустить батником его чтобы если вдруг он прервался по какой либо причине ( убился или еще что нибудь ) то запускался снова батником?
запускаю пока что через cmd командой
php.exe D:\blabla\script.php


Код: @echo off
cls
:loop
c:\php5\php.exe -f "c:\script.php"
goto loop
Автор: Elroir
Дата сообщения: 14.06.2011 00:55
fire4x

Цитата:
Как в данном примере обойтись без "goto :EOF"? После дописывания строк в конец добавляется только первый файл.

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


Цитата:
мне интересны оба вышеуказанных варианта

Опять же - дай четкую задачу - дано: X; хочу получить: Y
01MDM прав - можно сделать почти все, но универсального кода не существует.
Автор: fire4x
Дата сообщения: 14.06.2011 03:57
Elroir

Цитата:
Каждый раз долго пытаюсь понять вопрос...

Сори, не всегда получается описать то, к чему нужно прийти с первого раза.

Цитата:
Опять же - дай четкую задачу - дано: X; хочу получить: Y


Цитата:
Объединение 3х текстовых файлов в один следующим образом:
1.txt (содержимое файла: 123)
2.txt (содержимое файла: 456)
3.txt (содержимое файла: 789)
чтобы получить файл
4.txt с содержимым: 123456789



Код:
@echo off
setlocal
del /f/q 4.txt 2>nul
for %%a in (1.txt 2.txt 3.txt) do (
call :add "%%a"
)
goto :EOF
:add
set /p fileText=<%~1
set /p=%fileText%<nul>>4.txt
del 1.txt
del 2.txt
del 3.txt
Автор: 01MDM
Дата сообщения: 14.06.2011 05:53

Цитата:
Окно не закрывается.
Код не срабатывает.

А так:

Код:
.....
:add
set /p fileText=<%~1
set /p=%fileText%<nul>>4.txt
del %1
Автор: Elroir
Дата сообщения: 14.06.2011 09:24
fire4x

Цитата:
что делает "2>nul"

Это перенаправление сообщений об ошибках в никуда. В данном случае, мы пытаемся удалить файл 4.txt. Если файл не существует, в нормальном случае выдается сообщение о невозможности найти такой файл, с добавлением "2>nul", команда "del" работает "тихо".


Цитата:
Окно не закрывается. Код не срабатывает

Добавив 3 "del" в конец, ты уничтожил входные файлы после обработки первого из них. Либо используй конструкцию, предложенную 01MDM (она более правильная), либо такую:\

Код:
...
for ... (
...
)
del 1.txt
del 2.txt
del 3.txt
goto :EOF
:add
...
Автор: Joo1z
Дата сообщения: 14.06.2011 10:33
lexikon4ik
А оно и не будет работать, если ты окно закрываешь. Если окно мешает, то прячь его всякими cmdow @ /HID и прочие nircmd.
Автор: ndch
Дата сообщения: 14.06.2011 10:40
Есть программа gswin32c
из командной строки ей передаётся параметр
gswin32c.exe -sOutputFile=page-%d-w.png

Как составить файл.cmd
что бы %d воспринимался как параметр (но не как переменная)?

Так верно? Есть ли более корректный вариант ?
gswin32c.exe -sOutputFile=page-%%d-w.png

Где почитать про экранирование и прочие синтаксические особенности cmd ?
Автор: fire4x
Дата сообщения: 14.06.2011 14:19

Цитата:
А так:

Код:
.....
:add
set /p fileText=<%~1
set /p=%fileText%<nul>>4.txt
del %1

Каков принцип действия конструкции "del %1"? Как код понимает что именно нужно улалить, а что - не трогать.
P.S. Спасибо всем кто помогал.
Автор: Engraf
Дата сообщения: 14.06.2011 15:51
ndch По-моему так:
gswin32c.exe -sOutputFile=page-^%d-w.png
Автор: ndch
Дата сообщения: 14.06.2011 16:20
Engraf
запуск cmd с содержимым
"gswin32c.exe -sOutputFile=page-^%d-w.png"

интерпритируется cmd как
"gswin32c.exe -sOutputFile=page-d-w.png"
Автор: Engraf
Дата сообщения: 14.06.2011 16:38
Никак не могу придумать, как переместить часть файлов (по критерию, напр. по дате создания), сохранив структуру каталогов.
Подробнее: есть папка, в ней подкаталоги с файлами. Пусть под критерий попал файл "C:\Dir\Subdir1\file1.txt". Его необходимо переместить в папку Olddir так, чтобы полный путь к файлу был C:\Olddir\Subdir1\file1.txt
Автор: wolf0425
Дата сообщения: 14.06.2011 21:03
Engraf например как-то так:

Код: @echo off
set "_src=C:\Dir\"
set "_dest=C:\Olddir\"

cd /d "%_src%"
for %%a in ( "%_src%Subdir1\file1.txt" ) do call :_move "%%~a"
exit

:_move
set "_path=%~dp1"
call set "_path=%%_path:%_src%=%_dest%%%"
echo move /y "%~1" "%_path%"
exit /b
Автор: fire4x
Дата сообщения: 14.06.2011 22:02
Как добавить символы в начало текстового файла ?

Как удалить с конца текстового файла заданное количество символов ?
Автор: wolf0425
Дата сообщения: 14.06.2011 23:26

Цитата:
Как добавить символы в начало текстового файла ?
создать новый файл
записать в него символы
скопировать старый файл в конец нового
переименовать новый в старый


Цитата:
Как удалить с конца текстового файла заданное количество символов ?
в смысле - из конца последней строки?
sed.exe в помощь (первый варант седом тоже в одну строку решается).

Автор: fire4x
Дата сообщения: 15.06.2011 00:59
wolf0425

Цитата:
Цитата:Как добавить символы в начало текстового файла ?

создать новый файл
записать в него символы
скопировать старый файл в конец нового
переименовать новый в старый

А по-короче ничего не существует?
Если можно добавить текст в конец файла, то наверное можно как-то и в начало его всунуть. Или нет?
В результате копирования старого файла в конец нового появляется лишний символ в конце. Как его убрать?

Допустим, что это - содержимое текстового файла:

Код: 123456789
Автор: ShamanNeo
Дата сообщения: 15.06.2011 06:39
Помогите пожалуйста решить задачу:
Мне нужно сделать bat файл,который в тихом режиме,без окон и запросов завершит процесс приложения(например My Soft.exe), запустит приложение(в папке с bat файлом),дождется его завершения,а затем запустит 2 приложение(в папке с bat файлом) и завершит свою работу,не дожидаясь его завершения.
Для зевершения процессов есть PsKill,но как сделать рабочий bat с такими требованиями я не соображу...
Сообразил только на это:
@ECHO OFF

ECHO.
PsKill.exe My Software.exe (в имени есть пробелы)
echo.
start /wait Program.exe
start My Software.exe (в имени есть пробелы)
ECHO.
EXIT

Все действия происходят на локальном ПК.
Помогите довести bat файл до рабочего состояния...
Автор: wolf0425
Дата сообщения: 15.06.2011 07:10

Цитата:
А по-короче ничего не существует?
для общего случая - нет, для случая файла из одной строки - можно и покороче придумать.

Цитата:
В результате копирования старого файла в конец нового появляется лишний символ в конце. Как его убрать?
а почему у меня не появляется? символ то какой?


Добавлено:
ShamanNeo

Цитата:
PsKill.exe My Software.exe (в имени есть пробелы)
если есть пробелы - значит имя обязательно заключать в кавычки.
А в комманде start - при этом ещё и обязательно указывать заголовок окна:
start "" "My Software.exe"
Автор: fire4x
Дата сообщения: 15.06.2011 11:26
wolf0425

Цитата:
Цитата:А по-короче ничего не существует?

для общего случая - нет, для случая файла из одной строки - можно и покороче придумать.

Придумайте, пожалуйста.

Цитата:
Цитата:В результате копирования старого файла в конец нового появляется лишний символ в конце. Как его убрать?

а почему у меня не появляется? символ то какой?

Такой ->.

Код: copy /a /y 1.txt+2.txt 3.txt
Автор: res2001
Дата сообщения: 15.06.2011 11:43
fire4x

Цитата:
Такой ->.

Копируешь командой copy fil1+fil2 fil3 ?
Тогда это скорее всего из-за ключа /a который если и не указан, то действует по умолчанию.
Замени его на ключ /b - должно быть все нормально.

Цитата:
P.S. А что с удалением последнего (последних) символов из файла силами бат-файла/скрипта? Это возможно?

Файл однострочный?
Автор: fire4x
Дата сообщения: 15.06.2011 13:42
res2001

Цитата:
Копируешь командой copy fil1+fil2 fil3 ?
Тогда это скорее всего из-за ключа /a который если и не указан, то действует по умолчанию.
Замени его на ключ /b - должно быть все нормально.

Спасибо, получилось.
Цитата:
Цитата:P.S. А что с удалением последнего (последних) символов из файла силами бат-файла/скрипта? Это возможно?


Файл однострочный?

Да.
А с многострочными такие финты тоже можно делать? Если да, то как?

Автор: res2001
Дата сообщения: 15.06.2011 14:15
fire4x

Цитата:
А с многострочными такие финты тоже можно делать? Если да, то как?

Да можно по всякому. Просто тут готовых рецептов нет, надо каждую конкретную ситуацию рассматривать отдельно.
Для однострочного файла так:

Код: set /p ff=<file.txt
>file.txt echo.%ff:~,-1%

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

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


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