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

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

Автор: Maza Faka
Дата сообщения: 15.06.2007 13:48
AlessTO

Цитата:
Подскажите как батником открыть папку



Код:
start "" "c:\program files"
Автор: AlessTO
Дата сообщения: 15.06.2007 13:52
KapralBel
Сорри. Ступил. Все работает. Спасибо.

Добавлено:
А теперь обратный ход.. Нужно её закрыть.
Применяя taskkill /fi "Windowtitle eq <путь к папке>" не работает. Как быть?
Автор: newhome
Дата сообщения: 15.06.2007 15:01
to Maza Faka

Формат начального файла:
-------------------------------------------------------------------------------------------------------- 12345647567645747474'ABC'23452352352523432423'ABC'1235464656543.00'ZNACHENIE STROKI : ABCDEF GHIKSJG DFGSDG
12345647567645747474'ABC'23452352352523432423'ABC' 156543.00'ZNACHENIE STROKI : ABCDEF GHIKSJG DFGSDG
12345647567645747474'ABC'23452352352523432423'ABC' 26543.00'ZNACHENIE STROKI : ABCDEF GHIKSJG DFGSDG
--------------------------------------------------------------------------------------------------------
Re код скрипта:
del sum.txt
for /F "usebackq tokens=1" %%i in (`dir /b *.txt`) do (set fname=%%i)
for /F "usebackq tokens=9,10 delims='ru. " %%i in (`find %fname% "R'"`) do (echo %%i >>sum.txt)
--------------------------------------------------------------------------------------------------------
Задача скрипта:
1. вывести на экран список файлов данного каталога;
2. просчитать суммарные значения каждого выбранного пользователем файла. (можно по 1 ому файлу);
3. выдать сообщения формата:
------------------------------------
File1 - Sum=10000.12
File2 - Sum=19231.43
------------------------------------
Автор: Maza Faka
Дата сообщения: 15.06.2007 17:02
newhome
Попробуй этот код:

Код:
@echo off
setlocal enabledelayedexpansion
set count=0

for %%a in (c:\test\*.txt) do echo %%a

:begin
set /p "choose=Select file "
if not defined choose (Echo Error occured, select file) & (goto begin)

for /f "delims=" %%a in (c:\test\%choose%) do (
set str=%%a
set str=!str:'= !
for %%b in (!str!) do (
set sum=%%b
echo !sum! | findstr "1 2 3 4 5 6 7 8 9 0">nul
if !errorlevel!==0 (
set sum=%%b
for /l %%c in (0,1,254) do if not "!sum:~%%c,1!"=="" set /a count+=!sum:~%%c,1!)
)
)

echo %choose% - sum=%count%
pause
Автор: Nagual
Дата сообщения: 15.06.2007 17:32
такая вот проблема нарисовалась при использовании сценариев
есть файлы с именами, содержащие символы &^ (создать такие можно)
например
00-&2007.sfv 00-20^07.sfv
при обработке их сценарием просиходит усечение имен файлов до этих символов, то есть
00- и 00-20 соответственно
при передаче имен файлов напрямую какой-либо программе эти файлы воспринимаются нормально
вопрос: как этого избежать, не используя кавычки?
Автор: newhome
Дата сообщения: 15.06.2007 17:46
to Maza Faka
-----------------------------------
set str=!str:'= !
for %%b in (!str!) do (
set sum=%%b
echo !sum! | findstr "1 2 3 4 5 6 7 8 9 0">nul
if !errorlevel!==0 (
set sum=%%b
for /l %%c in (0,1,254) do if not "!sum:~%%c,1!"=="" set /a count+=!sum:~%%c,1!)
----------------------------------
Что не работает....-(
echo !sum! | findstr "1 2 3 4 5 6 7 8 9 0">nul - не очень понятен смысл, т.к. в строке:
________________
12345647567645747474'ABC'23452352352523432423'ABC'1235464656543.00'ZNACHENIE STROKI : ABCDEF GHIKSJG DFGSDG
________________
А. 'ABC'1235464656543.00'ZNA то, что находится чежду ABC и ZNA - является переменной, которую нужно обработать, все остальные числа в файле не важны.
count+=!sum: - я так понимаю можно сложить 2 числа с помощью переменная+=число+ или ....?

Б. То, что ты предлагаешь (набить название файла) я мог реализовать и сам, но... мне нужна след.картинка:
----------------------------------------------------------
Для расчета суммы файла ваdю.txt нажмите клавишу 1
Для расчета суммы файла вsаюdfg2.txt нажмите клавишу 2
Для расчета суммы файла вfgваю234.txt нажмите клавишу 3
Для расчета суммы файла выаfgваю234.txtt нажмите клавишу 4
.... и.т.д.
----------------------------------------------------------
Весь этот геморрой из-за того, что названия файлов может быть записано в разных кодировках (ISO, DOS, WIN, и.т.д.) и пользователь скрипта не может набрать некоторые символы.

P.S. Можешь просто написать как прочитать из файла 2 числа, записанных в строчку? (Пробовал записывать их в массив, а потом складывать через set /a sum=%%i+%%j+..., но чисел в файле может быть >1000)
Автор: Maza Faka
Дата сообщения: 15.06.2007 18:17
AlessTO

Цитата:
А теперь обратный ход.. Нужно её закрыть.
Применяя taskkill /fi "Windowtitle eq <путь к папке>" не работает. Как быть?


Можно при помощи утилиты "CMDOW.EXE", скачай, скопируй в папку WINDOWS и запускай этот код:

Код:
@echo off
for /f %%a in ('cmdow ^| find /i "explorer" ^| findstr /i /c:"c:\program files"') do cmdow %%a /cls
Автор: 01MDM
Дата сообщения: 16.06.2007 13:26
Подскажите, как добиться, чтоб выводились символы "!" и "=" в следующем батнике:

Код:
@ECHO OFF
cls
chcp 1251 >nul
for /f "delims=" %%i in ('more %1') do (
    set line=%%i
    call :main
)
GOTO:EOF

:main
setlocal enabledelayedexpansion
set /a c=0
:length
set l=!line:~%c%,1!
if not "%l%"=="" (
    set /a c+=1
    goto length
)
set /a c-=1
for /l %%i in (0,1,%c%) do (
    set d=!line:~%%i,1!
    set /p=!d!<nul
    ping -n 1 localhost >nul
)
echo.
Автор: Maza Faka
Дата сообщения: 16.06.2007 14:33
01MDM

Цитата:
как добиться, чтоб выводились символы "!" и "="

Скорее всего никак.
Автор: Elroir
Дата сообщения: 16.06.2007 20:57
sadmn

Цитата:
если я правильно понял, просто цикл прерывается после нахождения первого "IP" ?

Именно так.
В самом листинге у меня вызывает сомнения строчка "if %errorlevel% LEQ 1 goto okay". Насколько я понимаю - идет проверка на удачное подключение, а при этом errorlevel должен быть равен нулю. Проверка же идет на errorlevel, который меньше или равен единице. То есть если errorlevel=1, будет засчитано удачное соединение.
Автор: Lapochka ili Chai
Дата сообщения: 17.06.2007 12:48
Взял я addline чтобы добавлять строчку в файл, а этот addline не работает с файлами, у которых длинные имена (система Win XP). Бывает ли другой, хороший addline?
Автор: Elroir
Дата сообщения: 17.06.2007 13:21
Lapochka ili Chai
Если в системе включена генерация коротких имен, можешь воспользоваться такой конструкцией в батнике:

Код: for %%a in ("file with long name.txt") do addline line_to_add 10 %%~sa
Автор: Lapochka ili Chai
Дата сообщения: 17.06.2007 13:28
Elroir
Спасибо. Только я не понял, 10 это что, номер строки-в-файле, куда вставится моя строчка?
И ещё: а можно ли отключить "генерацию коротких имён" и, если можно, то как? А то после запуска addline все записи на чёрном экране (а не только addline-овская) обрубаются, и имена папок делаются невразумительными.
Автор: Elroir
Дата сообщения: 17.06.2007 14:19
Lapochka ili Chai

Цитата:
Только я не понял, 10 это что, номер строки-в-файле, куда вставится моя строчка?

Да. Число 10 взято просто для примера.

Цитата:
можно ли отключить "генерацию коротких имён" и, если можно, то как? А то после запуска addline все записи на чёрном экране (а не только addline-овская) обрубаются, и имена папок делаются невразумительными.

Не понял ни проблемы, ни вопроса. Код, который я привел выше, ничего не меняет в системе. Он просто использует короткие имена, которые Windows генерирует при создании файлов с длинными именами.
Подробнее опиши проблему, с примерами.
Автор: Maza Faka
Дата сообщения: 17.06.2007 15:03
Lapochka ili Chai

Цитата:
можно ли отключить "генерацию коротких имён"

Можно:

Код:
@echo off
reg add "HKLM\System\CurrentControlSet\Control\FileSystem" /t REG_DWORD /v NtfsDisable8dot3NameCreation /d 0 /f
Автор: Elroir
Дата сообщения: 17.06.2007 15:12
Maza Faka
Не поможет ему. Только проблемы начнутся - некоторые программы написаны так, что используют эти короткие имена. Если их не будет - могут появиться разнообразные глюки.
Автор: Lapochka ili Chai
Дата сообщения: 17.06.2007 15:36
Ёлки-палки! а этот addline ещё и обрезает все строки обрабатываемого файла по 80-й позиции!!!

Ну уж этого я от него никак не ожидал!

Ну уж короткие имена -- это ещё туда-сюда. А чтоб короткие строки внутри файла -- это просто ерунда!!!

Нет, такой addline нам не нужен.

Спасибо всем за советы, за потраченные усилия.

Добавлено:
кстати, может быть удалить этот addline из шапки? или сопроводить комментарием?
Чтоб другие не тратили время на этого негодяя?

Добавлено:
он сидит в шапке -- под ссылкой "полезные утилиты"
Автор: Elroir
Дата сообщения: 17.06.2007 16:37
Lapochka ili Chai
Ты прав - лучше этой утилитой не пользоваться. Убрал из шапки.
Автор: Maza Faka
Дата сообщения: 17.06.2007 18:10
Lapochka ili Chai

Цитата:
чтобы добавлять строчку в файл

Можно стандартными средствами, например:

Код:
@echo off
set count=0
for /f "delims=" %%a in (list.txt) do (
call :write "%%a"
echo %%a>> out.txt)
del /q /s list.txt
ren out.txt list.txt
goto :eof

:write
set /a count+=1
if %count% equ 3 echo New string>> out.txt
Автор: slayer120
Дата сообщения: 18.06.2007 08:17
Уважаемый ОЛЛ! Подскажите средство работы с security свойствами папок.

Задача - составить таблицу доступа (папка, группы юзеров, юзеры)
для файлового сервака (куча папок-шар и подпапок, внутри шар подпапки со своим секурите) .
С шарами вроде ясно - rmtshare (либо cacls) а вот как быть с секурите?

PS. Сорри если ошибся темой.
Автор: GORA2
Дата сообщения: 18.06.2007 08:40
Здравствуйте, всем!
Задача: Есть две папки old и new с файлами. Расширения файлов одно .png, имена файлов в этих папках тоже одинаковые. Т.е. файл bootscreen.png есть и в первой и во второй папке и так все остальные файлы. Различаются одноименные файлы в папках только размером и датой создания. Даты у файлов в папке old могут быть разные. Можно ли файлам в папке new присвоить даты одноименных файлов из папки old?
Заранее спасибо.
Автор: Maza Faka
Дата сообщения: 18.06.2007 10:54
GORA2
Попробуй так:

Код:
@echo off
set cur_date=%date%
setlocal enabledelayedexpansion
for %%a in (d:\old\*.png) do (
set old_date=%%~ta
set old_date=!old_date:~0,10!
date !old_date!
for %%b in ("d:\new\%%~nxa") do (
pushd %%~dpb
copy "%%~nxb"+,,
)
)
set date %cur_date%
Автор: GORA2
Дата сообщения: 18.06.2007 11:17
Maza Faka
Спасибо, Вы как всегда на высоте!!!.
Правда в последней строчке я выбросил set и оставил только date %cur_date%. А все остальное вроде сработало.
Автор: Elroir
Дата сообщения: 18.06.2007 12:27
Maza Faka
GORA2
В этом коде, меняется и проверяется дата модификации файла, а не создания. Или это не играет принципиальной роли?
Автор: Maza Faka
Дата сообщения: 18.06.2007 12:45
GORA2

Цитата:
Правда в последней строчке я выбросил set и оставил только date %cur_date%

Да, правильно, "set" там не нужен, поторопился...
Автор: GORA2
Дата сообщения: 18.06.2007 13:40
Elroir
Цитата:
В этом коде, меняется и проверяется дата модификации файла, а не создания. Или это не играет принципиальной роли?
Да... Вопрос конечно интересный! Лучше чтобы все было как у исходного файла (и дата создания, и дата модификации), если это возможно. Тогда точно сторонний скрипт должен сработать (я его не имею, чтобы проверить какую дату там анализируют и как ). А можно батником править обе даты?
Автор: Maza Faka
Дата сообщения: 18.06.2007 14:30
GORA2

Цитата:
А можно батником править обе даты?

Стандартными средствами нет.
Автор: newhome
Дата сообщения: 18.06.2007 17:39
to Maza Faka
Огромное спасибо за помощь. Решил не гемороиться c просчетом суммы и использовал С. Теперь нужно сделать чтобы пользователь выбирал файл, как я написал во второй раз. Проблема кодировок не решается способом 'more ^< c:\test\%choose%', также есть проблема длинных имен (например файл: "abcd sd 123 gg.cmd").

Автор: Maza Faka
Дата сообщения: 18.06.2007 18:41
newhome

Код:
@echo off
:begin
set /p "choose=Please select file [name.ext] "
if not defined choose goto begin
if /i not exist "c:\test\%choose%" (echo Error, file not exist & goto begin) else (
for /f "delims=" %%a in ('more "c:\test\%choose%"') do echo %%a)
Автор: ViSiToR
Дата сообщения: 18.06.2007 23:52
Привет всем, давно я тут не был ....

Есть задача:

Нужен батник для включения/отключения сети (через rasdial не получается ), т.е чтобы при одном нажатии включалось соеденение, при повторном отключалось..

Переключатель наверно смогу сделать сам, если узнаю как включать/отключать сеть, а также как получить текущее состояние (вкл. или выкл.).

Желательно встроенными средставми Win Xp/Vista.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

Предыдущая тема: Автозагрузка терминальной сессии


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