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

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

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

Цитата:
Вообще смотри set /?, там описан этот синтаксис.

Пытался читать. Ничего не понял... кроме того, что это не мой уровень.


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

А если понадобится удалить первый символ (или несколько)?


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


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

А что, например, двухстрочный и трехстрочный варианты удаления (последнего символа в последней строке) будут сильно отличаться друг от друга?
Автор: res2001
Дата сообщения: 15.06.2011 15:27
fire4x

Цитата:
А если понадобится удалить первый символ (или несколько)?

%ff:~NN,MM% - где NN - начальный символ, MM - сколько символов.
Но это для вырезания подстроки в MM символов начиная с NNого символа (первый символ нулевой).
В нашем варианте трактуется так - взять всю строку за исключение последнего символа.
Что убрать первый символ, будет так: %ff:~1,%
NN или MM могут отсутствовать.

Цитата:
А что, например, двухстрочный и трехстрочный варианты удаления (последнего символа в последней строке) будут сильно отличаться друг от друга?

Можно сделать и универсальный вариант.
Автор: p3west
Дата сообщения: 15.06.2011 16:08
Помогите создать батник на запуск архиватора.Чтобы он читал архив в одной папке,а разархивировал в другую.

Спасибо
Автор: fire4x
Дата сообщения: 15.06.2011 16:26
res2001

Цитата:
Что убрать первый символ, будет так: %ff~:1,%


Код:
set /p ff=<file.txt
>file.txt echo.%ff~:1,%
Автор: urodliv
Дата сообщения: 15.06.2011 16:30
p3west
Ну я же вам в другой теме намекнул, что хоть краткость и сестра таланта, но враг техзадания.
А то получите в ответ на вашу просьбу нечто из такого разряда:

Код:
echo off
архиватор путь_до_архива путь_до_каталога_куда_надо_разархивировать
Автор: p3west
Дата сообщения: 15.06.2011 17:08

Цитата:
Не понимаю что не так я спросил...



Добавлено:

Цитата:
Хорошо,скажу так.Мне нужен образец написания.


Добавлено:
Мне нужен образец написания. Решил так написать потому что тут вроде понимающие люди и что-то типа
Код:
echo off
архиватор путь_до_архива путь_до_каталога_куда_надо_разархивировать
Автор: fire4x
Дата сообщения: 15.06.2011 17:24
p3west

Цитата:
Цитата:Не понимаю что не так я спросил...




Добавлено:

Цитата:Хорошо,скажу так.Мне нужен образец написания.



Добавлено:
Мне нужен образец написания. Решил так написать потому что тут вроде понимающие люди и что-то типа
Код:
echo off
архиватор путь_до_архива путь_до_каталога_куда_надо_разархивировать

писать не будут...

Что ты попросил:
Цитата:
Помогите создать батник на запуск архиватора.Чтобы он читал архив в одной папке,а разархивировал в другую.

То и получил:
Цитата:
Код:
echo off
архиватор путь_до_архива путь_до_каталога_куда_надо_разархивировать


Автор: p3west
Дата сообщения: 15.06.2011 17:27
Интересно.Это вы считаете помощь в создании батника раз ответом такая лажа пишется?В моем понимании помочь создать батник,значит по крайней мере написать образец,а не прописать последовательнось действий.
Автор: urodliv
Дата сообщения: 15.06.2011 17:37

Цитата:
Это вы считаете помощь в создании батника раз ответом такая лажа пишется?

"Помоги себе сам" - кажется так говорится? А вот вы не хотите себе помочь. Вы живёте в мире, где есть только один архиватор?
Автор: wolf0425
Дата сообщения: 15.06.2011 17:48

Цитата:
set /p ff=<file.txt
>file.txt echo.%ff~:1,%

Так не работает - любой текст превращается в "1,".
логично: ~ ставится после : а не перед, видно же по предыдущим, работающим примерам (и по set /?)


Добавлено:
p3west
Цитата:
Интересно.Это вы считаете помощь в создании батника раз ответом такая лажа пишется
почему лажа? реальный батник для абстрактного архиватора с именем "архиватор", разархивирующего без доп ключей указанный ему файл в указанный путь...
Хочешь для какого-то более другого архиватора - уточняешь свой вопрос, а лучше - попросту прочитай хэлп по своему архиватору, там гарантированно есть примеры.
Автор: A1eksandr1
Дата сообщения: 15.06.2011 18:01
Добрый вечер. Такой вопрос:
Можно ли не прибегая к дополнительным утилитам/файлам автоматически изменить высоту cmd окошка.
Стандартная высота 25, если создать на бат файл ярлык и вызвать его свойства, то там в закладке расположение можно изменить высоту, хотелось бы достичь того же не прибегая к созданию ярлыка

res2001
Спасибо, помогло
Автор: fire4x
Дата сообщения: 15.06.2011 18:03
wolf0425

Цитата:
Цитата:set /p ff=<file.txt
>file.txt echo.%ff~:1,%

Так не работает - любой текст превращается в "1,".


логично: ~ ставится после : а не перед, видно же по предыдущим, работающим примерам (и по set /?)

Увы, но в данном случае перестановка знаков результат не изменяет.
Автор: res2001
Дата сообщения: 15.06.2011 18:50
A1eksandr1

Код: mode con cols=100 lines=50
Автор: fire4x
Дата сообщения: 15.06.2011 19:17
res2001

Цитата:
Добавлено:
fire4x
Ну да ошибся, в прошлом посте, очепятался.
так попробуй

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


Ура! Заработало!


Добавлено:

Цитата:
Цитата:Цитата:А что, например, двухстрочный и трехстрочный варианты удаления (последнего символа в последней строке) будут сильно отличаться друг от друга?


Можно сделать и универсальный вариант.

Будьте так добры...
Автор: res2001
Дата сообщения: 15.06.2011 19:44
fire4x
как-то так будет

Код: @echo off
SetLocal EnableDelayedExpansion
>nul 2>&1 del /f /q test1.txt
for /f "tokens=1,* delims=:" %%a in ('findstr /n /r ".*" test.txt') do (
    if defined num >>test1.txt echo.!txt!
    set "num=%%a" & set "txt=%%b"
)
>>test1.txt echo.%txt:~1%
Автор: ShamanNeo
Дата сообщения: 15.06.2011 20:08

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


Благодарю за помощь...
Автор: fire4x
Дата сообщения: 15.06.2011 21:01
res2001

Цитата:
@echo off
SetLocal EnableDelayedExpansion
>nul 2>&1 del /f /q test1.txt
for /f "tokens=1,* delims=:" %%a in ('findstr /n /r ".*" test.txt') do (
if defined num >>test1.txt echo.!txt!
set "num=%%a" & set "txt=%%b"
)
>>test1.txt echo.%txt:~1%

Если не трудно, распишите код построчно (какие конструкции за что отвечают).
Автор: ShamanNeo
Дата сообщения: 16.06.2011 04:11
Помогите пожалуйста еще советом:
Есть bat файл,который запускает WScript - который в свою очередь выполняет сценарий(поиск в реестре значения расположения приложения(например MyApp.exe) и его запуск).Проблемма вот в чем:
После запуска WScript и выполнения им задачи(запуск приложения MyApp.exe),окно консоли не закрывается,а ждет завершения работы MyApp.exe
Как сделать так,чтобы окно консоли закрывалось,не дожидаясь завершения работы MyApp.exe ?
Вот содержимое bat файла:
@ECHO OFF

ECHO.
WScript Setup.vbs //B //Nologo
ECHO.
EXIT
Автор: Elroir
Дата сообщения: 16.06.2011 09:21
ShamanNeo

Код:
start WScript Setup.vbs //B //Nologo
Автор: res2001
Дата сообщения: 16.06.2011 10:05
fire4x

Цитата:
Если не трудно, распишите код построчно (какие конструкции за что отвечают).

Я вроде и так все расписал.
В последней строке скрипта, собственно, правится последняя строка файла.
Цикл сделан так что на одном проходе сначала записывается предыдущая строка в файл, потом считывается текущая строка в переменные, таким образом получаем, что по выходе из цикла в переменных остается последняя строка, которая еще не была записана в файл.
Автор: Engraf
Дата сообщения: 16.06.2011 11:55
wolf0425
Цитата:
...
:_move
set "_path=%~dp1"
call set "_path=%%_path:%_src%=%_dest%%%"
echo move /y "%~1" "%_path%"
exit /b
Смысл уловил, спасибо.
Один вопрос, почему здесь call: call set "_path=%%_path:%_src%=%_dest%%%" ?
Автор: wolf0425
Дата сообщения: 16.06.2011 12:14

Цитата:
Один вопрос, почему здесь call:
если коротко - потому что я не люблю вписывать в батники команду setlocal enabledelayedexpansion
с ней было бы просто
set "_path=!_path:%_src%=%_dest%!"
- т.е. без call, и чуть больше ограничений по допустимым символам в путях, доп команда в начале.
ещё вопросы?

работает это так:
при чтении интерпретатором очередной строки батника - все %переменные% сразу заменяются значениями, %% заменяются на %, в таком виде строка выполняется.
call вписан именно для того, чтоб задержать замену %_path:* значением - в случае двойных %% она произойдет не при первом чтении строки, а только при следующем прогоне через интерпретатор, при выполнении команды. Но вот значения %_src% и %_dest% - впишутся в строку уеж на первом проходе, и по ним на втором проходе произойдет символьная замена в %_path:*.
enabledelayedexpansion и переход на !переменные! имеет результатом примерно то же самое.
Автор: Engraf
Дата сообщения: 16.06.2011 13:13
wolf0425Спасибо за разъяснения, полезная инфа!

Ещё вопрос :
Можно как-нить изменить глобальную переменную в пределах локальной области (setlocal --- endlocal)? Т.е. вот:
Код: set "param=global"
setlocal
set "param=local"
endlocal
rem Будет выведено: "global"
echo/%param%
Автор: olegpronin
Дата сообщения: 16.06.2011 13:34
помогите, пожалуйста, решить следующую задачу:
Имеется жесктйи диск с музыкой, шаблон такой:

Artist {Genre 1, Genre 2}\Artist - Album (Year) [FLAC]

Необходимо получить txt файл со списком всех подпапок Artist - Album (Year) [FLAC]
В принципе, можно, чтобы список был вида Artist {Genre 1, Genre 2}\Artist - Album (Year) [FLAC]

Спасибо!
Автор: wolf0425
Дата сообщения: 16.06.2011 13:56

Цитата:
Как сделать чтоб вывелось "local"?
например переназначить переменную после endlocal, но присвоить ей значение локальной

Код: set "param=global"
setlocal
set "param=local"
endlocal & set "param=%param%"
rem Будет выведено: "local"
echo/%param%
Автор: fire4x
Дата сообщения: 16.06.2011 14:33
res2001

Цитата:
Цитата:Если не трудно, распишите код построчно (какие конструкции за что отвечают).


Я вроде и так все расписал.
В последней строке скрипта, собственно, правится последняя строка файла.

Интересует смысл вот этого:

Код: >nul 2>&1
Автор: Engraf
Дата сообщения: 16.06.2011 14:39
wolf0425
Все гениальное просто! Еще раз спасибо, скрипт готов
Автор: olegpronin
Дата сообщения: 16.06.2011 14:49
wolf0425

Цитата:
dir /b /ad *


дело в том, что таким образом скрипт закидывает в список папки, которые находятся в той же директории.

т.е. в списке получаю

Artist {Genre 1, Genre 2}

А надо получить
Artist {Genre 1, Genre 2}\Artist - Album (Year) [FLAC] или Artist - Album (Year) [FLAC]
Автор: Engraf
Дата сообщения: 16.06.2011 15:01
olegpronin
Мож так?
Код: dir /b /ad *[FLAC]
Автор: olegpronin
Дата сообщения: 16.06.2011 15:07
Engraf
нет.

Вот структура каталогов:
c:\FLAC\Artist {Genre 1, Genre 2}\Artist - Album (Year) [FLAC]

bat файл кидаю в c:\FLAC

в списке list.txt должны появиться только папки Artist - Album (Year) [FLAC]


Добавлено:
вот так можно dir /b /ad /s *[FLAC]
но надо чтобы c:\FLAC\Artist {Genre 1, Genre 2}\Artist - Album (Year) [FLAC] превратилось в
Artist - Album (Year) [FLAC]

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

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


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