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

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

Автор: wolf0425
Дата сообщения: 23.07.2009 09:19
smirnvlad
чего-то у тебя странное творится

для начала - чего выдаст такая строка
dir /b /s /a:d "%systemdrive%\z1z2z3"
Автор: madmasles
Дата сообщения: 23.07.2009 18:55
01MDM
smirnvlad

Большое Вам спасибо за помощь и участие.


Цитата:
Код:
C:\Documents and Settings\Не Шилов\Рабочий стол> for /f "tokens=*" %i in ('dir /b /s /a:d "%systemdrive%\z1z2z3"') do rd /s /q "%i"


Этот код из консоли удаляет папку z1z2z3 только если она в единственном экземпляре на диске. Если их больше (в подпапках), то код из консоли мгновенно выдает следующее приглашение (C:\Documents and Settings\Не Шилов\Рабочий стол>_), а батник на мгновение появляется и исчезает не отработав даже если эта папка одна.


Цитата:
Код:
@echo off
for /f "tokens=*" %%i in ('dir /b /s /a:d "%systemdrive%\" ^|findstr /E "\\z1z2z3"') do @echo "%%i" & rd /s /q "%%i"


Этот код нашел и удалил все папки z1z2z3 из батника (их было 5 или 6).

Объясните, пожалуйста, почему так происходит.

PS
Так и не нашел как код в теги заключать. Если не трудно, объясните, пожалуйста.
Автор: 01MDM
Дата сообщения: 23.07.2009 20:07
madmasles

Цитата:
Этот код из консоли удаляет папку z1z2z3 только если она в единственном экземпляре на диске.

Этот код у меня удаляет ВСЕ папки с таким названием, где бы они не находились в пределах %SYSTEMDRIVE%.


Цитата:
Объясните, пожалуйста, почему так происходит.

Объяснить не могу, т.к у меня все работает, что у тебя показывает команда:

Код:
C:\> dir /b /s /a:d "%systemdrive%\z1z2z3"
Автор: madmasles
Дата сообщения: 23.07.2009 21:00
01MDM


Цитата:
Код:
C:\> dir /b /s /a:d "%systemdrive%\z1z2z3"


Находит все папки. После этого ввел в консоли:

Цитата:
Код:
C:\Documents and Settings\Не Шилов\Рабочий стол> for /f "tokens=*" %i in ('dir /b /s /a:d "%systemdrive%\z1z2z3"') do rd /s /q "%i"

Все папки удалил.
А из батника код
Цитата:
for /f "tokens=*" %i in ('dir /b /s /a:d "%systemdrive%\z1z2z3"') do rd /s /q "%i"

не работает.
Пробовал на 3 разных компах - то же самое.

Вроде разобрался.
Из консоли ничего не находит и не удаляет в том случае, если одна из папок находится в корне диска, стоит их распихать по разным подпапкам - все находит и удаляет. Но из батника код все равно не работает.
А код smirnvlad

Цитата:
@echo off
for /f "tokens=*" %%i in ('dir /b /s /a:d "%systemdrive%\" ^|findstr /E "\\ХХХ УУУ"') do @echo "%%i" & rd /s /q "%%i"

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


Автор: 01MDM
Дата сообщения: 23.07.2009 21:10
madmasles

Цитата:
Пробовал на 3 разных компах - то же самое.


Хм, да из корня затыкается. Извиняюсь. Добавь в батник:

Код:
@echo off
rd /s /q "%systemdrive%\z1z2z3" 2>nul
for /f .....
Автор: madmasles
Дата сообщения: 23.07.2009 21:42
01MDM

Цитата:
Код:
@echo off
rd /s /q "%systemdrive%\z1z2z3" 2>nul
for /f .....

Так из батника только из корня удаляет и закрывается, хотя в конце стоит pause. А из консоли удаляет из корня сразу и потом, после нажатия Enter, удаляет все остальные.
Автор: lorents
Дата сообщения: 23.07.2009 21:45
Скажите пожалуйста, как создать *.txt файл с кодировкой UTF-16LE, имеется ввиду из приложения?
Автор: Maza_Faka
Дата сообщения: 24.07.2009 06:25
lorents

Цитата:
как создать *.txt файл с кодировкой UTF-16LE, имеется ввиду из приложения?

Из какого приложения?
Автор: slay1212
Дата сообщения: 24.07.2009 08:46
Вопрос такой - есть скрипт запускающийся при логоне. В скрипте запускаются утили Руссиновича (psloglist, psshutdown) и др. Проблема такая - при первом запуске от имени какого-либо юзера утиль выдает на экран лицензионный экран , на котором надо кликнуть что-то типа I agree ( 1 кнопка). Поскольку скрипт запускается скрытно, на этом окошке все зависает . Как сделать чтоб при первом запуске что-то автоматом писалось бы в окне лицензии? Просто эхом кинуть Y не пойдет наверно?
psloglist.exe -d 0 -s -r -id 528 security | find /i "logon type: 2" > %tmp%\syst.txt
Автор: graydevil
Дата сообщения: 24.07.2009 09:09
А можно ли с bat управлять мышкой ?

- переместить туда то, жмакнуть кнопкой такойто...

Думаю что-то типа сторонней тулзы с параметрами перемещения передаваемыми
наверное есть...


Автор: king_stiven
Дата сообщения: 24.07.2009 09:37
slay1212
graydevil
утилита nircmd эмуляция движения и клика мышкой и нажатия клавиш, в шапке.
Автор: lorents
Дата сообщения: 24.07.2009 10:18

Цитата:
Из какого приложения?

ой простите опечатался, как мне с конвертировать *.txt файл с кодировкой UTF-8 и ANSI на UTF-16LE?
Автор: 01MDM
Дата сообщения: 24.07.2009 10:42
slay1212

Цитата:
В скрипте запускаются утили Руссиновича (psloglist, psshutdown) и др.

Сначала запиши значение реестра, а потом запускай утилиту без всяких эмуляций кликов. На примере psexec.exe:

Код:
@echo off
reg add hkcu\software\sysinternals\psexec /v "eulaaccepted" /t reg_dword /d "0x1" /f

:: И запускаешь утилиту
Автор: Refugee
Дата сообщения: 24.07.2009 10:47
slay1212
psloglist.exe -accepteula -d 0 -s -r -id 528 security

lorents
iconv -f UTF-8 -t UTF-16LE file.txt > result.txt
Автор: Crag Hack
Дата сообщения: 24.07.2009 10:53
Возможно ли решить такую задачу: изменить первые 2 байта в файле на некое значение?
Автор: 01MDM
Дата сообщения: 24.07.2009 10:53

Цитата:
-accepteula

Точно.
Автор: madmasles
Дата сообщения: 24.07.2009 11:11
01MDM

Все-таки хотелось разобраться, почему этот код отрабатывает из консоли и не отрабатывает из батника

[more]@echo off
rd /s /q "%systemdrive%\z1z2z3" 2>nul
for /f "tokens=*" %i in ('dir /b /s /a:d "%systemdrive%\z1z2z3"') do rd /s /q "%i"[/more]

И почему он затыкается, если папка находится в корне.
Автор: lorents
Дата сообщения: 24.07.2009 12:28
Refugee
спасибо,
а можно еще попросить сделать конвертер Windows-1251 в UTF-16LE?
и еще подскажите пожалуйста, как можно узнать кодировку *.txt файла?
Автор: Refugee
Дата сообщения: 24.07.2009 13:43
lorents
нетрудно догадаться:
iconv -f windows-1251 -t UTF-16LE file.txt > result.txt

unicode кодировки можно определить по byte order mark (BOM) в начале файла, однобайтовые - анализом частоты символов.
Автор: lorents
Дата сообщения: 24.07.2009 14:12
Refugee

Цитата:
unicode кодировки можно определить по byte order mark (BOM) в начале файла, однобайтовые - анализом частоты символов.

а можно это узнать через *.bat?
Автор: Refugee
Дата сообщения: 24.07.2009 14:41
lorents
надо скрипт на VBScript или на чём умеешь.
кстати, в html utf-8 BOM нет
Автор: 01MDM
Дата сообщения: 24.07.2009 15:28
madmasles
Наверное потому что ты в батнике вместо %%i пишешь %i:

Цитата:

@echo off
rd /s /q "%systemdrive%\z1z2z3" 2>nul
for /f "tokens=*" %i in ('dir /b /s /a:d "%systemdrive%\z1z2z3"') do rd /s /q "%i"



Цитата:
И почему он затыкается, если папка находится в корне.

Не знаю, это только с папками, т.е к файлам не относится. Может фича?
Автор: smirnvlad
Дата сообщения: 24.07.2009 17:04
madmasles

Цитата:
И почему он затыкается, если папка находится в корне.

так происходит из-за команды dir

Код:
dir /b /s /a:d "%systemdrive%\z1z2z3"
Автор: king_stiven
Дата сообщения: 24.07.2009 18:23
madmasles
В справке к dir:

Код: dir [диск:][путь][имя_файла]

[диск:][путь]
Задание диска и каталога, список файлов которого будет выведен.

[имя_файла]
Задание файла или группы файлов, сведения о которых требуется вывести.
Автор: TX86
Дата сообщения: 24.07.2009 18:53
Мне дали написать простенький Bat - файл:
Разработать командный файл,который будет выполнять след. задачу
в цикле с интервалом в 60 сек проверять наличие файла в каталоге с:\01\ с именем test.txt. При наличии файла отправить сообщение на ПК R02 с текстом "Есть файл" и продолжать проверку.
Помогите пожалуйста,буду очень благодарен.
Автор: smirnvlad
Дата сообщения: 24.07.2009 19:22
TX86

Код:
@echo off
:slabel1
if exist "c:\01\test.txt" (msg * /time:59 /server:R02 /W "Есть файл!")
ping -w 1000 -n 61 127.0.0.1
goto:slabel1
Автор: wolf0425
Дата сообщения: 24.07.2009 19:27
удалено
Автор: TX86
Дата сообщения: 24.07.2009 19:36
smirnvlad
Спасибо большое !
объясни только строчку
ping -w 1000 -n 61 127.0.0.1
Автор: smirnvlad
Дата сообщения: 24.07.2009 21:29
TX86

Цитата:
объясни только строчку
ping -w 1000 -n 61 127.0.0.1

эта команда своим выполнением создает паузу на 60 секунд, ссылки на другие варианты паузы можно посмотреть в шапке темы Готовые решения и частые вопросы
Автор: TX86
Дата сообщения: 24.07.2009 23:35
Спасибо

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778

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


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