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

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

Автор: wolf0425
Дата сообщения: 30.06.2011 11:20
чем бы быстренько перекодировать буковки тестового файла в нижний регистр?
26 строчек вида set "text=%text:A=a%" что-то энтузиазма не вызывают, когда их 10к раз прогнать надо.
Автор: NIKZZZZ
Дата сообщения: 30.06.2011 11:37
wolf0425

Цитата:
чем бы быстренько перекодировать буковки тестового файла в нижний регистр?

Например, Mark, маленький редактор , очень удобный для разного рода конвертирования.
Автор: res2001
Дата сообщения: 30.06.2011 11:44
wolf0425
В параметре имя файла

Код: var args = WScript.Arguments;
var fso = new ActiveXObject("Scripting.FileSystemObject");
var str = fso.OpenTextFile(args(0),1).ReadAll();
WScript.echo(str.toLowerCase());
WScript.quit();
Автор: wolf0425
Дата сообщения: 30.06.2011 12:02

Цитата:
Например, Mark, маленький редактор , очень удобный для разного рода конвертирования.
а он точно умеет что-то конвертировать из командной строки?
ну и по его ссылкам - Error 404. Document not found.

вручную то я и ФАРом могу без проблем (он все равно есть уже), но мне из батника надо.

Добавлено:
res2001 спасибо. А на работу из stdin это как-то можно переделать?
Автор: res2001
Дата сообщения: 30.06.2011 12:21
wolf0425

Цитата:
А на работу из stdin это как-то можно переделать?


Код: WScript.Echo(WScript.StdIn.ReadAll().toLowerCase());
Автор: king_stiven
Дата сообщения: 30.06.2011 14:24
wolf0425
sed "s/[A-Z]/\L&/g"

sed "s/[^ ]/\L&/g"
Автор: ASE_DAG
Дата сообщения: 30.06.2011 15:12
king_stiven
> sed "s/[A-Z]/\L&/g"
> sed "s/[^ ]/\L&/g"
sed "s/[[:upper:]]/\L&/g" будет наиболее логичным.
Автор: JohnRD
Дата сообщения: 30.06.2011 15:12
добрый день вопрос такой
хочу сверить 2 файла по размеру, если разные, перезаписать
и если вовсе нет то записать


Код:
Set ORG="\\ess.local\Software\Links\ess_icons.icl"
Set CHK="%SystemRoot%\system32\ess_icons.icl"
call :Checking %ORG% %CHK%
goto :EOF

:Checking
If /i %~z1 GTR %~z2 Copy /y %ORG% %CHK%
Автор: res2001
Дата сообщения: 30.06.2011 15:39
JohnRD
if /? тебе поможет
да и что бы это значило:

Цитата:
если нет то записать ?


Автор: JohnRD
Дата сообщения: 30.06.2011 15:44
Set ORG="\\ess.local\Software\Links\ess_icons.icl"
Set CHK="%SystemRoot%\system32\ess_icons.icl"
if not exist %CHK% Copy /y %ORG% %CHK%

как объединить оба кода



Автор: res2001
Дата сообщения: 30.06.2011 16:01
JohnRD
добавь оба ifа в одну процедуру, сначала с exist, потом с gtr, в конце обоих строк допиши
& exit /b


Добавлено:

Set ORG="\\ess.local\Software\Links\ess_icons.icl"
Set CHK="%SystemRoot%\system32\ess_icons.icl"
call :Checking %ORG% %CHK%
goto :EOF

:Checking
if not exist "%~2" Copy /y "%~1" "%~2" & exit /b
Ifi %~z1 GTR %~z2 Copy /y "%~1" "%~2" & exit /b

Добавлено:
Кстати, можно тупо копировать без всяких проверок с помощью xcopy /m
xcopy /m %ORG% %CHK%
Лишнего копировать не будет.
Смотри xcopy /?
Автор: JohnRD
Дата сообщения: 30.06.2011 16:19
спасибо
я ключик /V курил

/V Проверка размера каждого нового файла.
но он не пашет


а м вроде не тот
/M Копирование только файлов с установленным архивным атрибутом;
после копирования атрибут снимается.
Автор: res2001
Дата сообщения: 30.06.2011 16:20
JohnRD

Цитата:
а м вроде не тот

Он автоматически устанавливается снова при любом изменении файла.

Добавлено:
/V - это проверка после копирования
Автор: JohnRD
Дата сообщения: 30.06.2011 16:28
уловил спасибо
Автор: qqqbbb
Дата сообщения: 30.06.2011 16:46
Как создать список файлов с относительными путями включая поддиректории?
Автор: 01MDM
Дата сообщения: 30.06.2011 18:27
qqqbbb

Код:
@echo off
subst z: "c:\folder"
pushd z:
for /f "tokens=*" %%i in (' dir /b /s /a ') do echo %%~pnxi
popd
subst z: /d
Автор: qqqbbb
Дата сообщения: 01.07.2011 11:51
01MDM
Выводимый текст можно скопировать в файл не выделяя текст в окне?
Автор: king_stiven
Дата сообщения: 01.07.2011 12:41

Цитата:
Выводимый текст можно скопировать в файл

for /f "tokens=*" %%i in (' dir /b /s /a ') do 1>>1.txt echo %%~pnxi
Автор: Karbid87
Дата сообщения: 01.07.2011 14:02
Ребята, помогите пожалуйста. Хочу кое что автоматизировать с помощью батника.
Есть ветка реестра
[HKEY_CURRENT_USER\Software\***\***\6005\***\***]
"Program"=dword:001b7740
Значения не написал, чтобы понятнее объяснить. Суть в том, что нужно сделать сначала запрос на ввод в батнике этого числа (сейчас это 6005, но может быть любое, которое вводит пользователь). И в зависимости от введенного числа создается запись в реестре по вышеуказанному шаблону, но с новым значение (там где сейчас цифра 6005, а после ввода пользователем своего числа там будет его число).
Автор: 01MDM
Дата сообщения: 01.07.2011 16:35
Karbid87
Без проверки, на ввод значения, или нулевой ввод

Код:
@echo off
setlocal
set /p key="Enter value: "

for /f "tokens=*" %%i in ('" reg query "hkcu\software\***\***" | findstr /e "\\[0-9][0-9][0-9][0-9]" "') do set "oldkey=%%~nxi"

reg add "hkcu\software\***\***\%key%\***\***" /v Program /t reg_dword /d 0x001b7740 /f
if not %oldkey% equ %key% reg delete "hkcu\software\***\***\%oldkey%" /f
Автор: Karbid87
Дата сообщения: 01.07.2011 16:55
01MDM, спасибо вам огромное. Но можно сделать так, чтобы можно было ввести только четырехзначное число? Если знаков в числе не 4, то выдавалось бы сообщение, что ввод неточный и повторите попытку ввода и сразу ниже опять Enter value. Ну в случае введения пустого значения и введения буквы также. А так всё замечательно работает уже сейчас. Но хотелось бы допилить немного.
Автор: 01MDM
Дата сообщения: 01.07.2011 17:06
Karbid87
Добавь:

Код:
@echo off
setlocal

set "key=null"

:again
set /p key="Enter value: "
echo .%key%. | 1>nul findstr "\<\.[0-9][0-9][0-9][0-9]\.\>" || goto:again

.....
Автор: Karbid87
Дата сообщения: 01.07.2011 17:10
01MDM, огромное преогромное Вам спасибо. Всё работает отлично и как задумано было.
Автор: 01MDM
Дата сообщения: 01.07.2011 17:12
Karbid87
Еще раз посмотри, немного исправил на случай ввода вида "qwerty 1234"
Автор: Karbid87
Дата сообщения: 01.07.2011 17:17
01MDM, в случае введения текста и через пробел четырех чисел и вправду создавал такую ветку, но пустую и не затирает старую ветку. Всё я увидел, что вы просто исправили своё сообщение. Еще раз спасибо огромное.
Автор: 01MDM
Дата сообщения: 01.07.2011 17:33
Karbid87
Вопрос в том чтобы случайно не ввели некорректное значение. Попробуй проверять так:


Код:
@echo off
setlocal

set "key=null"

:again
set /p key="Enter value: "
echo %time%%key%%time% | 1>nul findstr "\<%time%[0-9][0-9][0-9][0-9]%time%\>" || goto:again
Автор: Karbid87
Дата сообщения: 01.07.2011 17:36
01MDM, что значит некорректное? Приведите пример. С новым кодом вроде бы кроме четырехзначного числа ничего невозможно вписать.
Автор: 01MDM
Дата сообщения: 01.07.2011 17:44
Karbid87
Это я про "echo .%key%."
Например введут "1234." и будет неверная переменная (с точкой), вопрос в задании условия для проверки, чтобы нельзя было его случайно повторить. Вариант с "%time%%key%%time%" вроде отрабатывает как следует
Автор: Karbid87
Дата сообщения: 01.07.2011 17:47
01MDM, вы снова правы. Вариант "1234." со старым кодом прошел удачно. Создалась ветка "1234." затерев старую. Новый вариант не создает при таком значении (просто просит ввести заново).
Премного благодарен, что потратили время на решение моей проблемы.
Автор: NIKZZZZ
Дата сообщения: 01.07.2011 18:05

Цитата:
можно было ввести только четырехзначное число?



Код: @Echo off

:again
set /p Test="Enter value: "

Set TestDigit=%Test%
Set TestDigit=%TestDigit:1=0%
Set TestDigit=%TestDigit:2=0%
Set TestDigit=%TestDigit:3=0%
Set TestDigit=%TestDigit:4=0%
Set TestDigit=%TestDigit:5=0%
Set TestDigit=%TestDigit:6=0%
Set TestDigit=%TestDigit:7=0%
Set TestDigit=%TestDigit:8=0%
Set TestDigit=%TestDigit:9=0%

If not "%TestDigit%"=="0000" goto:again
Echo Ok

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

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


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