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

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

Автор: wolf0425
Дата сообщения: 09.11.2010 10:48
OOD
Цитата:
а если папок множество подпапок и т.д. как их почистить все по расширению?
прочти наконец del /? и открой для себя ключик /s. и /q заодно.


Код: cd "c:\dir" && del /q /s *.vir
Автор: smirnvlad
Дата сообщения: 09.11.2010 10:51
OOD
я бы после cd добавил проверку, чтобы не удалять файлы где попало


Код:
cd c:\dir
if errorlevel 1 exit
del /F /S /Q *.vir
Автор: res2001
Дата сообщения: 09.11.2010 12:37
smirnvlad
Лучше прописать полный путь в del, не будет лишних проверок и команд и не будет удалять ничего лишнего в случае отсутствия каталога.
Автор: Free_Soft
Дата сообщения: 09.11.2010 16:00
Такой вопрос: батник превращен в .exe с помощью Bat_To_Exe_Converter.exe. Распаковывается в %temp%\xxxx.tmp. Можно как-то из этого батника проследить путь до "родившего" его екзешника?
Автор: sL4yer
Дата сообщения: 09.11.2010 16:54
нужно проверить сколько задано параметров. Например если 2 (%1 и %2) - присвоить эти значения переменным a и b. Если же параметр 1 (%1) - переменной a
Автор: bomzzz
Дата сообщения: 09.11.2010 17:04
Free_Soft
а так кажется галочка есть рабочий путь

Добавлено:
проверь. может в какой то переменной и сохраняется. хависит от того как программа написана
Автор: smirnvlad
Дата сообщения: 09.11.2010 17:10
Free_Soft

Цитата:
Можно как-то из этого батника проследить путь до "родившего" его екзешника?

узнать pid батника
через wmic узнать parent pid
через wmic узнать CommandLine для parent pid
Автор: Free_Soft
Дата сообщения: 09.11.2010 17:15
smirnvlad

Цитата:
узнать pid батника
через wmic узнать parent pid
через wmic узнать CommandLine для parent pid

механизм вроде ясен, но можно поподробнее?
Автор: bomzzz
Дата сообщения: 09.11.2010 17:18


ECHO OFF
COLOR 9F
CLS
echo %0
echo %1
pause


в 0 будет рабочий путь в ттемп, а 1 путь до екзешника
Автор: NIKZZZZ
Дата сообщения: 09.11.2010 18:44
Free_Soft

Цитата:
Такой вопрос: батник превращен в .exe с помощью Bat_To_Exe_Converter.exe. Распаковывается в %temp%\xxxx.tmp. Можно как-то из этого батника проследить путь до "родившего" его екзешника?


Некоторые конверторы передают исходный .exe путь в качестве первого параметра, и добавляют Shift в начало батника. Попробуй скомпилировать такой батник


Код: @echo off
echo. %*
pause
Автор: bomzzz
Дата сообщения: 09.11.2010 18:56
зависит от того поставит он эту галочку или нет
Автор: Free_Soft
Дата сообщения: 09.11.2010 20:47
с галкой в чистом виде вроде работает, но сам по себе батник уже работает с параметрами...

Код: set par1=%~1
Автор: bomzzz
Дата сообщения: 09.11.2010 21:07
Free_Soft
выучи язык програмирования это не сложнее чем бьатники
Автор: 01MDM
Дата сообщения: 09.11.2010 21:33

Автор: Free_Soft
Дата сообщения: 09.11.2010 21:40
01MDM
нужно "Temporary directory" ибо с батником пакуются еще файлы
Автор: smirnvlad
Дата сообщения: 10.11.2010 06:28
bomzzz
та галочка передает не

Цитата:
путь до "родившего" его екзешника?

а рабочую папку из которой тот "екзешник" запущен

Free_Soft
если нужна рабочая папка, из которой запущен скомпилированный exe, то это одно, а если путь к exe то - другое

[more]
компилировать Bat_To_Exe_Converter.exe в Temporary и поставить Submit current

Код: [no]
@echo off

echo.all params (with exe work dir):
echo.%*
echo.param0 %0
echo.param1 %1
echo.

set params=%0
:st
if ""=="%2" goto:e
shift
set params=%params% %0
goto:st
:e
set pcd=%~1
echo.parent work dir:
echo.%1
echo.

call:executenext %params%
exit

:executenext
shift
echo.all params to bat (but includes %0)
echo.%*
echo.param0 %0
echo.param1 %1

echo.%~0
set me=%~0
set me=%me:\=\\%

for /f "tokens=1,2 delims==" %%a in ('WMIC process WHERE ^(CommandLine like ^"%%%me%%%^"^) get ParentProcessId /Value') do if "%%a"=="ParentProcessId" set ppid=%%b
for /f "tokens=1,2 delims==" %%a in ('WMIC process WHERE ProcessId^=^"%ppid%^" get ExecutablePath /Value') do if "%%a"=="ExecutablePath" set ppath=%%b

echo.
echo.exe cd = %pcd%
echo.exe path = %ppath%
[/no]
Автор: bomzzz
Дата сообщения: 10.11.2010 08:24
екзешник не со своей рабочей директорией чета вообще неправильно запускается. просто cmd команду выполняет
Автор: Free_Soft
Дата сообщения: 10.11.2010 08:33
smirnvlad
см ПМ
Автор: king_stiven
Дата сообщения: 10.11.2010 11:15
sL4yer
if not "%2"=="" (
set a=%1
set b=%2
) else (
set a=%1
)

варианты:%1, %~1
Автор: smirnvlad
Дата сообщения: 10.11.2010 11:31
king_stiven
а почему бы не так
set a=%1
if not "%2"=="" (
set b=%2
)
или так
if not "%2"=="" set b=%2
if not "%1"=="" set a=%1
Автор: king_stiven
Дата сообщения: 10.11.2010 12:52
smirnvlad
можно

Автор: stepanandryuhin
Дата сообщения: 10.11.2010 13:43
Здравствуйте.

Возможно ли с помощью батника изменить дату установки программы в Windows XP?
Автор: king_stiven
Дата сообщения: 10.11.2010 14:16
нельзя наверно
Автор: xtradex
Дата сообщения: 10.11.2010 14:52
Здравствуйте!

А можно ли средствами комстроки сменить часовой пояс в WinXP?
Немного не в тему, наверное, но PowerShell тоже подойдет...

Гугление выдает только запуск апплета с часами 8(
Автор: smirnvlad
Дата сообщения: 10.11.2010 16:24
xtradex
гугл говорит
control.exe timedate.cpl,,/Z Russian Standard Time
где после /Z указывается имя раздела из HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones
Автор: Accessor
Дата сообщения: 10.11.2010 17:41
Народ, подскажите как сделать, плиз. У меня есть строка. Мне надо определённый символ в этой строке заменить на другой символ. Таких символов в строке может быть множество. Нутром чую, что эту строку надо подать на вход в цикл for /f, но не понимаю, что надо указать в качестве tokens?
Автор: king_stiven
Дата сообщения: 10.11.2010 17:57
Accessor
Sed ?
или используй этот символ в качестве delims
Автор: smirnvlad
Дата сообщения: 10.11.2010 18:02
Accessor
если строка в переменной
поменять все 1 на 2 в переменной me так
set me=%me:1=2%
Автор: Accessor
Дата сообщения: 11.11.2010 10:22
king_stiven
"sed" не является внутренней или внешней

Цитата:
или используй этот символ в качестве delims
Это я понимаю, что поисковый символ надо ставить в delims. А как мне узнать количество токенов, которые надо вычленить в моей строке - вот в чём был мой вопрос. Если токены не указывать вообще, то for дает в тело цикла только первый токен, а мне нужны все токены.

smirnvlad

Цитата:
поменять все 1 на 2 в переменной me так
set me=%me:1=2%

Спасибо, всё получилось. Отправляюсь курить букварь по команде set
Автор: res2001
Дата сообщения: 11.11.2010 10:38
Accessor

Цитата:
А как мне узнать количество токенов, которые надо вычленить в моей строке - вот в чём был мой вопрос.

Если сделать рекурсивную процедуру, то можно решить проблему, как раз недавно делал нечто подобное, правда для других целей (преобразовывал сжатый xml в текстовый файл, где каждая строка это либо тег xml либо данные xml). Вот пример:


Код: for /f "usebackq tokens=1,* delims=<>" %%b in ("file.xml") do (
    set "v1=%%b"
    set "v2=%%c"
    call:parser
)

:parser
echo.%v1%
for /f "tokens=1,* delims=<>" %%d in ("%v2%") do (
    set "v1=%%d"
    set "v2=%%e"
    call:parser
    exit /b
)

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Windows 7 Starter


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