» Задачи на bat-файлах 10
res2001
Цитата:
Спасибо. А я тщетно пытался переделать "пример с реестром"...
А как сделать, чтобы название папки записалось в файле в определенном месте (строка 5, позиция 10)?
Как сделать, чтобы название папки записалось в файле вместо определенного слова?
Код: dir /a:d /b "c:\windows\*_32" >dirs.txt
Цитата:
dir /a:d /b c:\windows\* >dirs.txt
Спасибо. А я тщетно пытался переделать "пример с реестром"...
А как сделать, чтобы название папки записалось в файле в определенном месте (строка 5, позиция 10)?
Как сделать, чтобы название папки записалось в файле вместо определенного слова?
Код: dir /a:d /b "c:\windows\*_32" >dirs.txt
fire4x
Цитата:
Так что если хочется странного, пиши программу на c++/c#/vb и делай там с файлами что душе угодно...
Цитата:
А как сделать, чтобы название папки записалось в файле в определенном месте (строка 5, позиция 10)?А никак. Если бы подобные вещи были возможны, народ бы забросил языки программирования, и все писал бы на бат-файлах.
Как сделать, чтобы название папки записалось в файле вместо определенного слова?
Так что если хочется странного, пиши программу на c++/c#/vb и делай там с файлами что душе угодно...
vlary
Цитата:
Ну почему же никак, на это спец.утилиты есть - sedом запросто.
fire4x
Цитата:
Используй утилиту sed, найдешь ее в шапке, примеры использования ищи в этой ветке, открой "версию для печати и поищи.
Цитата:
Можно и это, но "технологичнее" - "вместо определенного слова".
Цитата:
А никак. Если бы подобные вещи были возможны, народ бы забросил языки программирования, и все писал бы на бат-файлах.
Ну почему же никак, на это спец.утилиты есть - sedом запросто.
fire4x
Цитата:
Как сделать, чтобы название папки записалось в файле вместо определенного слова?
Используй утилиту sed, найдешь ее в шапке, примеры использования ищи в этой ветке, открой "версию для печати и поищи.
Цитата:
А как сделать, чтобы название папки записалось в файле в определенном месте (строка 5, позиция 10)?
Можно и это, но "технологичнее" - "вместо определенного слова".
vlary
Цитата:
Увы, языками программирования не владею.
Цитата:
А возможно ли с помощью бат-файла объединить допустим 3 текстовых файла в один следующим образом:
1.txt (содержимое файла: 123)
2.txt (содержимое файла: 456)
3.txt (содержимое файла: 789)
чтобы получить файл
4.txt с содержимым: 123456789
Цитата:
Так что если хочется странного, пиши программу на c++/c#/vb и делай там с файлами что душе угодно...
Увы, языками программирования не владею.
Цитата:
Цитата:А как сделать, чтобы название папки записалось в файле в определенном месте (строка 5, позиция 10)?
Как сделать, чтобы название папки записалось в файле вместо определенного слова?
А никак. Если бы подобные вещи были возможны, народ бы забросил языки программирования, и все писал бы на бат-файлах.
А возможно ли с помощью бат-файла объединить допустим 3 текстовых файла в один следующим образом:
1.txt (содержимое файла: 123)
2.txt (содержимое файла: 456)
3.txt (содержимое файла: 789)
чтобы получить файл
4.txt с содержимым: 123456789
fire4x
Цитата:
Возможно, но при определенном условии - в каждом из файлов 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
Цитата:
А возможно ли с помощью бат-файла объединить допустим 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
Цитата:
Код:
@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" ?
fire4x
Цитата:
Все это можно. Но надо ставить вопрос конкретно. Ты с каждым ответом добавляешь новые вопросы. Сначала подумай что ты хочешь.
Цитата:
Как сделать, чтобы для каждого из 3-х файлов можно было-бы выбирать добавлять текст в эту-же строку или начинать с новой?
А возможно ли преобразовать код таким образом, чтобы для каждого из 3-х файлов можно было-бы выбирать номер строки, которую нужно добавлять в файл?
Все это можно. Но надо ставить вопрос конкретно. Ты с каждым ответом добавляешь новые вопросы. Сначала подумай что ты хочешь.
01MDM
Цитата:
Чтобы впоследствии не переспрашивать многократно о каждой вариации, мне интересны оба вышеуказанных варианта.
Цитата:
При решении новых задач зачастую возникают и новые вопросы (пока моих умений хватает только на самое простенькое). Ну и в процессе испытания предложенных решений порой возникают непредвиденные нестыковки при практическом применении - сначала пытаюсь решить их своими усилиями.
Цитата:
Как в данном примере обойтись без "goto :EOF"? После дописывания строк в конец добавляется только первый файл.
Цитата:
Цитата:Как сделать, чтобы для каждого из 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"? После дописывания строк в конец добавляется только первый файл.
здрасте ^^
такая ситуация: есть скрипт php который чекает порт бесконечно
как запустить батником его чтобы если вдруг он прервался по какой либо причине ( убился или еще что нибудь ) то запускался снова батником?
запускаю пока что через cmd командой
php.exe D:\blabla\script.php
Код: @echo off
cls
:loop
c:\php5\php.exe -f "c:\script.php"
goto loop
такая ситуация: есть скрипт php который чекает порт бесконечно
как запустить батником его чтобы если вдруг он прервался по какой либо причине ( убился или еще что нибудь ) то запускался снова батником?
запускаю пока что через cmd командой
php.exe D:\blabla\script.php
Код: @echo off
cls
:loop
c:\php5\php.exe -f "c:\script.php"
goto loop
fire4x
Цитата:
Каждый раз долго пытаюсь понять вопрос...
Покажи, что именно происходит - что дано и что получается.
Цитата:
Опять же - дай четкую задачу - дано: X; хочу получить: Y
01MDM прав - можно сделать почти все, но универсального кода не существует.
Цитата:
Как в данном примере обойтись без "goto :EOF"? После дописывания строк в конец добавляется только первый файл.
Каждый раз долго пытаюсь понять вопрос...
Покажи, что именно происходит - что дано и что получается.
Цитата:
мне интересны оба вышеуказанных варианта
Опять же - дай четкую задачу - дано: X; хочу получить: Y
01MDM прав - можно сделать почти все, но универсального кода не существует.
Elroir
Цитата:
Сори, не всегда получается описать то, к чему нужно прийти с первого раза.
Цитата:
Цитата:
Код:
@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
Цитата:
Каждый раз долго пытаюсь понять вопрос...
Сори, не всегда получается описать то, к чему нужно прийти с первого раза.
Цитата:
Опять же - дай четкую задачу - дано: 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
Цитата:
Окно не закрывается.
Код не срабатывает.
А так:
Код:
.....
:add
set /p fileText=<%~1
set /p=%fileText%<nul>>4.txt
del %1
fire4x
Цитата:
Это перенаправление сообщений об ошибках в никуда. В данном случае, мы пытаемся удалить файл 4.txt. Если файл не существует, в нормальном случае выдается сообщение о невозможности найти такой файл, с добавлением "2>nul", команда "del" работает "тихо".
Цитата:
Добавив 3 "del" в конец, ты уничтожил входные файлы после обработки первого из них. Либо используй конструкцию, предложенную 01MDM (она более правильная), либо такую:\
Код:
...
for ... (
...
)
del 1.txt
del 2.txt
del 3.txt
goto :EOF
:add
...
Цитата:
что делает "2>nul"
Это перенаправление сообщений об ошибках в никуда. В данном случае, мы пытаемся удалить файл 4.txt. Если файл не существует, в нормальном случае выдается сообщение о невозможности найти такой файл, с добавлением "2>nul", команда "del" работает "тихо".
Цитата:
Окно не закрывается. Код не срабатывает
Добавив 3 "del" в конец, ты уничтожил входные файлы после обработки первого из них. Либо используй конструкцию, предложенную 01MDM (она более правильная), либо такую:\
Код:
...
for ... (
...
)
del 1.txt
del 2.txt
del 3.txt
goto :EOF
:add
...
lexikon4ik
А оно и не будет работать, если ты окно закрываешь. Если окно мешает, то прячь его всякими cmdow @ /HID и прочие nircmd.
А оно и не будет работать, если ты окно закрываешь. Если окно мешает, то прячь его всякими cmdow @ /HID и прочие nircmd.
Есть программа gswin32c
из командной строки ей передаётся параметр
gswin32c.exe -sOutputFile=page-%d-w.png
Как составить файл.cmd
что бы %d воспринимался как параметр (но не как переменная)?
Так верно? Есть ли более корректный вариант ?
gswin32c.exe -sOutputFile=page-%%d-w.png
Где почитать про экранирование и прочие синтаксические особенности cmd ?
из командной строки ей передаётся параметр
gswin32c.exe -sOutputFile=page-%d-w.png
Как составить файл.cmd
что бы %d воспринимался как параметр (но не как переменная)?
Так верно? Есть ли более корректный вариант ?
gswin32c.exe -sOutputFile=page-%%d-w.png
Где почитать про экранирование и прочие синтаксические особенности cmd ?
Цитата:
А так:
Код:
.....
:add
set /p fileText=<%~1
set /p=%fileText%<nul>>4.txt
del %1
Каков принцип действия конструкции "del %1"? Как код понимает что именно нужно улалить, а что - не трогать.
P.S. Спасибо всем кто помогал.
ndch По-моему так:
gswin32c.exe -sOutputFile=page-^%d-w.png
gswin32c.exe -sOutputFile=page-^%d-w.png
Engraf
запуск cmd с содержимым
"gswin32c.exe -sOutputFile=page-^%d-w.png"
интерпритируется cmd как
"gswin32c.exe -sOutputFile=page-d-w.png"
запуск cmd с содержимым
"gswin32c.exe -sOutputFile=page-^%d-w.png"
интерпритируется cmd как
"gswin32c.exe -sOutputFile=page-d-w.png"
Никак не могу придумать, как переместить часть файлов (по критерию, напр. по дате создания), сохранив структуру каталогов.
Подробнее: есть папка, в ней подкаталоги с файлами. Пусть под критерий попал файл "C:\Dir\Subdir1\file1.txt". Его необходимо переместить в папку Olddir так, чтобы полный путь к файлу был C:\Olddir\Subdir1\file1.txt
Подробнее: есть папка, в ней подкаталоги с файлами. Пусть под критерий попал файл "C:\Dir\Subdir1\file1.txt". Его необходимо переместить в папку Olddir так, чтобы полный путь к файлу был C:\Olddir\Subdir1\file1.txt
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
Код: @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
Как добавить символы в начало текстового файла ?
Как удалить с конца текстового файла заданное количество символов ?
Как удалить с конца текстового файла заданное количество символов ?
Цитата:
Как добавить символы в начало текстового файла ?создать новый файл
записать в него символы
скопировать старый файл в конец нового
переименовать новый в старый
Цитата:
Как удалить с конца текстового файла заданное количество символов ?в смысле - из конца последней строки?
sed.exe в помощь (первый варант седом тоже в одну строку решается).
wolf0425
Цитата:
А по-короче ничего не существует?
Если можно добавить текст в конец файла, то наверное можно как-то и в начало его всунуть. Или нет?
В результате копирования старого файла в конец нового появляется лишний символ в конце. Как его убрать?
Допустим, что это - содержимое текстового файла:
Код: 123456789
Цитата:
Цитата:Как добавить символы в начало текстового файла ?
создать новый файл
записать в него символы
скопировать старый файл в конец нового
переименовать новый в старый
А по-короче ничего не существует?
Если можно добавить текст в конец файла, то наверное можно как-то и в начало его всунуть. Или нет?
В результате копирования старого файла в конец нового появляется лишний символ в конце. Как его убрать?
Допустим, что это - содержимое текстового файла:
Код: 123456789
Помогите пожалуйста решить задачу:
Мне нужно сделать 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 файл до рабочего состояния...
Мне нужно сделать 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 файл до рабочего состояния...
Цитата:
А по-короче ничего не существует?для общего случая - нет, для случая файла из одной строки - можно и покороче придумать.
Цитата:
В результате копирования старого файла в конец нового появляется лишний символ в конце. Как его убрать?а почему у меня не появляется? символ то какой?
Добавлено:
ShamanNeo
Цитата:
PsKill.exe My Software.exe (в имени есть пробелы)если есть пробелы - значит имя обязательно заключать в кавычки.
А в комманде start - при этом ещё и обязательно указывать заголовок окна:
start "" "My Software.exe"
wolf0425
Цитата:
Придумайте, пожалуйста.
Цитата:
Такой ->.
Код: copy /a /y 1.txt+2.txt 3.txt
Цитата:
Цитата:А по-короче ничего не существует?
для общего случая - нет, для случая файла из одной строки - можно и покороче придумать.
Придумайте, пожалуйста.
Цитата:
Цитата:В результате копирования старого файла в конец нового появляется лишний символ в конце. Как его убрать?
а почему у меня не появляется? символ то какой?
Такой ->.
Код: copy /a /y 1.txt+2.txt 3.txt
fire4x
Цитата:
Копируешь командой copy fil1+fil2 fil3 ?
Тогда это скорее всего из-за ключа /a который если и не указан, то действует по умолчанию.
Замени его на ключ /b - должно быть все нормально.
Цитата:
Файл однострочный?
Цитата:
Такой ->.
Копируешь командой copy fil1+fil2 fil3 ?
Тогда это скорее всего из-за ключа /a который если и не указан, то действует по умолчанию.
Замени его на ключ /b - должно быть все нормально.
Цитата:
P.S. А что с удалением последнего (последних) символов из файла силами бат-файла/скрипта? Это возможно?
Файл однострочный?
res2001
Цитата:
Спасибо, получилось.
Цитата:
Да.
А с многострочными такие финты тоже можно делать? Если да, то как?
Цитата:
Копируешь командой copy fil1+fil2 fil3 ?
Тогда это скорее всего из-за ключа /a который если и не указан, то действует по умолчанию.
Замени его на ключ /b - должно быть все нормально.
Спасибо, получилось.
Цитата:
Цитата:P.S. А что с удалением последнего (последних) символов из файла силами бат-файла/скрипта? Это возможно?
Файл однострочный?
Да.
А с многострочными такие финты тоже можно делать? Если да, то как?
fire4x
Цитата:
Да можно по всякому. Просто тут готовых рецептов нет, надо каждую конкретную ситуацию рассматривать отдельно.
Для однострочного файла так:
Код: set /p ff=<file.txt
>file.txt echo.%ff:~,-1%
Цитата:
А с многострочными такие финты тоже можно делать? Если да, то как?
Да можно по всякому. Просто тут готовых рецептов нет, надо каждую конкретную ситуацию рассматривать отдельно.
Для однострочного файла так:
Код: set /p ff=<file.txt
>file.txt echo.%ff:~,-1%
Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
Предыдущая тема: зависает установка Windows XP: 39 минут
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.