Ru-Board.club
← Вернуться в раздел «Программы»

» Командная строка, батники, сценарии (bat, cmd) 2

Автор: Kilyan
Дата сообщения: 06.03.2009 14:18

Цитата:
можно принимать ТОЛЬКО цифры 1..12

А интересно как это?
Автор: NvvLazyTiger
Дата сообщения: 06.03.2009 15:24
Ну, например так:
Код: set i_month=
set jTmp0=%1
:: если параметра нет, - значит нет
if NOT defined jTmp0 goto IfAllOk
:: если это 0, - тоже нет
if %jTmp0% == 0 goto IfAllOk
:: если в параметре больше двух символов - и это не то
if NOT %jTmp0:~2%. == . goto IfAllOk
:: убираем лидирующий 0 из входного параметра (если есть)
if %jTmp0:~0,1% == 0 set jTmp0=%jTmp0:~1%
:: результат последовательно сравниваем с числами в интевале 1..12
for /l %%a in (1,1,12) do if NOT defined i_month call :Chkparam %%a
:: и идём докладать...
goto IfAllOk

:ChkParam проверка - это наше число?
if NOT %1 == %jTmp0% goto :eof
:: да, принимаем...
set i_month=%1
:: если это один символ - приписываем слева цифру "0"
if %i_month:~1%. == . set i_month=0%1
goto :eof

:IfAllOk
if defined i_month (echo Ok, i_month=%i_month%) else (echo ! NO or BAD param [%%1=%1])
pause
Автор: rBBWYwg
Дата сообщения: 06.03.2009 16:19

Прошу помочь с кодом, который может заменять часть имени файлов по маске. Сама не асилила.
Например, файлы в папке FOLDER имеют имена
12345678.txt
87654321.txt
76543212.txt

Надо в их именах заменить, скажем, все 12 на нули.

Это актуально. Но если будет настрой - хотелось бы знать такой же прием для субдиректорий определенной папки. Плз.
Автор: Maza_Faka
Дата сообщения: 07.03.2009 07:16
rBBWYwg

Цитата:
Надо в их именах заменить, скажем, все 12 на нули.

Попробуйте так:

Код:
@Echo Off

Set "MyFolder=C:\Test"

::Создаём утилиту sbs2.com
Call :sbs2.com

For /F "Usebackq Delims=" %%A In (`Dir %MyFolder%\*.txt /B /S ^| Find "12"`) Do (
For /F "Usebackq Delims=" %%B In (`Echo %%~nxA ^| "%temp%.\sbs2.com" 0 "12" "00"`) Do Ren "%%A" "%%B"
)

Del /F /Q "%temp%.\sbs2.com">Nul
pause
GoTo :EOF

:sbs2.com
:: Create the assembler program, by Herbert Kleebauer
echo Bj@jzh`0X-`/PPPPPPa(DE(DM(DO(Dh(Ls(Lu(LX(LeZRR]EEEUYRX2Dx=> "%temp%.\sbs2.com"
echo 0DxFP,0Xx.t0P,=XtGsB4o@$?PIyU!WvX0GwUY Wv;ovBX2Gv0ExGIuht6>> "%temp%.\sbs2.com"
echo ?@}IKuNWpe~Fpe?FNHlF?wGMECIQqo{Ox{T?kPv@jeoSeIlRFD@{AyEKj@>> "%temp%.\sbs2.com"
echo iqe~1NeAyR?mHAG~BGRgB{~H?o~TsdgCYqe?HR~upkpBG?~slJBCyA?@xA>> "%temp%.\sbs2.com"
echo LZp{xq`Cs?H[C_vHDyB?Hos@QslFA@wQ~~x}viH}`LYNBGyA?@xAB?sUq`>> "%temp%.\sbs2.com"
echo LRy@PwtCYQEuFK@A~BxPtDss@fFqjVmzD@qBEOEenU?`eHHeBCMs?FExep>> "%temp%.\sbs2.com"
echo LHsPBGyA?@xAunjzA}EKNs@CA?wQpQpKLBHv?s`WJ`LRCYyIWMJaejCksl>> "%temp%.\sbs2.com"
echo H[GyFGhHBwHZjjHeoFasuFUJeHeB?OsQH[xeHCPvqFj@oq@eNc?~}Nu??O>> "%temp%.\sbs2.com"
echo ~oEwoAjBKs?Zp`LBzHQzyEFrAWAG{EFrAqAGYwHTECIQ{coKIsaCsf{Oe~>> "%temp%.\sbs2.com"
echo CK}Ayre~CNFA{rAyEKFACrA{EKGAjbA}eKGSjNMtQFtc{OAyDGFj?{FDGQ>> "%temp%.\sbs2.com"
echo KAjNVk_OCAx@e?f{o?CosI}1EGizhljJ~H1ZeG}JBA~rACBMDGjjDG@g0>> "%temp%.\sbs2.com"
Автор: bk99
Дата сообщения: 07.03.2009 10:14
Help!
Помогите организовать синхронизацию (в одну сторону) одинаковых папок на двух не связанных сетью компах. (Существующие программы синхронизации по разным причинам не подходят.) Хотелось бы так:
1. на компе №1 запускаем file1.bat, который создаёт список файлов указанной директории (с путями и подпапками).
2. идём с этим списком на комп №2 и запускаем file2.bat - при этом на сменный носитель копируются только файлы (с сохранением структуры директорий), отсутсвующие в списке. При этом, одинаковые файлы (т.е. файлы, которые уже есть на обоих компах)должны игнорироваться. Структура директорий должна учитываться обязательно. Например, "dir1/file.aaa" и "dir1/dir2/file.aaa" - должны считаться разными файлами.
3. возвращаемся на комп №1 и сливаем со сменного носителя новые файлы. Здесь тоже, наверное, батник понадобится, чтобы файлы в нужные подпапки попадали.
В идеале хорошо бы учитывать и даты создания файлов и заменять более старые файлы, расположенные на компе №1, более новыми файлами с компа №2.
Спасибо!
Автор: zzxx1488
Дата сообщения: 07.03.2009 16:53
залил копию UnxUtils c http://unxutils.sourceforge.net/ в связи с тем, что даунлоад мертвый с оффсайта
в архиве unxutils.zip & unxupdates.zip последние версии
взять можно отсюда:
http://www.gazup.com/4BR8E-unxutils.rar-download-mirrors
Автор: Le9i0nX
Дата сообщения: 07.03.2009 17:00
Зраствуйте все.
Перейду сразу к делу.

cmd /с chcp 1251>nul && dir /a:-d /-c /n /s /t:w C:\ >C:\0\scren.txt

Вот такая строка проблема в том что вывод в файл всегда в 866 кодировки идет.
Я не могу использовать внешний конвектор потому что он портит часть имен файлов.

[more=Пример спецефичных имен файлов.]
Содержимое папки Z:\0\Hyundai РЎounty

18.11.2008 07:09 3338598 Р С?Р>РчР?Р?Рч С?РїС?Р°Р?Р>РчР?РёРч.pdf
18.11.2008 07:09 4652875 Р-Р>РчРєС'С?Р?Р?Р+Р?С?С?Р?Р?Р?Р°Р?РёРч Р°Р?С'Р?Р?Р?Р+РёР>С?.pdf
18.11.2008 07:08 8672236 Р?Р°С?Р?Р°Р?Р?С<Р№ Р?Р°Р> Рё Р?Р?С?С'.pdf
18.11.2008 07:08 1671750 Р?Р?Р>РчС?Р° Рё С?РёР?С<.pdf
18.11.2008 07:08 4541658 Р?С?Р·Р?Р?.pdf
18.11.2008 07:08 2666126 Р?Р+Р?Р?С?РчР?, Р?РчР?С'РёР>С?С&#9532;РёС? Рё РєР?Р?Р?РёС&#9532;РёР?Р?РёС?Р?Р?Р°Р?РёРч Р?Р?Р·Р?С?С:Р°.pdf
18.11.2008 07:08 636887 Р?Р+С%Р°С? РёР?С"Р?С?Р?Р°С&#9532;РёС?.pdf
18.11.2008 07:09 1314494 РўРчС:Р?РёС&#9578;РчС?РєР?Рч С?С?РєР?Р?Р?Р?С?С'Р?Р? РїР? С'С?Р°Р?С?Р?РёС?С?РёРё (M03S5)(MTA).pdf
18.11.2008 07:09 4184067 РўРчС:Р?РёС&#9578;РчС?РєР?Рч С?С?РєР?Р?Р?Р?С?С'Р?Р? РїР? С'С?Р°Р?С?Р?РёС?С?РёРё (M2S5, M3S5)(MT).pdf
18.11.2008 07:09 8592503 РўР?С?Р?Р?Р·Р?Р°С? С?РёС?С'РчР?Р°.pdf
18.11.2008 07:09 1687890 РЎС&#9532;РчРїР>РчР?РёРч.pdf
18.11.2008 07:08 1509441 Р?Р?Р?Р?РчС?РєР°.pdf
12 файлов 43468525 байт
[/more]
мне надо чтоб вывод в файл был в win кодировке.
Автор: maxi812
Дата сообщения: 08.03.2009 05:10
ребята напишите батничек для обновления фтп сайта
Автор: Maza_Faka
Дата сообщения: 08.03.2009 07:24
Le9i0nX
Попробуйте так:

Код:
cmd /с chcp 1251>nul & dir /a:-d /-c /n /s /t:w C:\ >C:\0\scren.txt
Автор: Le9i0nX
Дата сообщения: 08.03.2009 08:45
Maza_Faka
Точно также.
Я заметил что если писать в 0.cmd
в таком формате все норм

chcp 1251>nul
dir /a:-d /-c /n /s /t:w C:\ >C:\scren.txt

В две стоки, но получаестя не очень моя прога вызывает созданый такой батник, а потом его удаляеть.
Мне надо к своей проге прикрутить расшаривание всего диска а этот метод быстрее всех. Проверял.
Автор: Maza_Faka
Дата сообщения: 08.03.2009 09:35
Le9i0nX

Цитата:
Точно также

Хм... А так?

Код:
(cmd /c chcp 1251>nul) && (cmd /c dir /a:-d /-c /n /s /t:w C:\>C:\0\scren.txt)
Автор: Le9i0nX
Дата сообщения: 08.03.2009 10:07
не такой не прокатит здесь у тебя ошибка синтаксиса
нельзя пременять скобки до загрузки самого интерпритатора команд(cmd.exe)
Автор: Maza_Faka
Дата сообщения: 08.03.2009 10:22
Le9i0nX

Цитата:
здесь у тебя ошибка синтаксиса

Да, хотя при запуске из батника или ком. строки работает. Запускай без скобок, у меня работает.
Автор: Le9i0nX
Дата сообщения: 08.03.2009 12:17
спс реал работает вот такая строка.


Код: cmd /c chcp 1251>nul && cmd /c dir /a:-d /-c /n /s /t:w C:\>C:\0\scren.txt
Автор: bk99
Дата сообщения: 08.03.2009 15:13

Цитата:
Помогите организовать синхронизацию (в одну сторону) одинаковых папок на двух не связанных сетью компах. (Существующие программы синхронизации по разным причинам не подходят.) Хотелось бы так:
1. на компе №1 запускаем file1.bat, который создаёт список файлов указанной директории (с путями и подпапками).
2. идём с этим списком на комп №2 и запускаем file2.bat - при этом на сменный носитель копируются только файлы (с сохранением структуры директорий), отсутсвующие в списке. При этом, одинаковые файлы (т.е. файлы, которые уже есть на обоих компах)должны игнорироваться. Структура директорий должна учитываться обязательно. Например, "dir1/file.aaa" и "dir1/dir2/file.aaa" - должны считаться разными файлами.
3. возвращаемся на комп №1 и сливаем со сменного носителя новые файлы. Здесь тоже, наверное, батник понадобится, чтобы файлы в нужные подпапки попадали.
В идеале хорошо бы учитывать и даты создания файлов и заменять более старые файлы, расположенные на компе №1, более новыми файлами с компа №2.


Цитата:
Maza_Faka
XCOPY; ROBOCOPY?

Спасибо.
Комманды XCOPY и ROBOCOPY, насколько я понимаю, были бы полезны для синхронизации компов, связанных в сеть. А у меня-то проблема немного другая, компы не связаны, только через сменный носитель. Конечно, можно постоянно держать на этом сменном носителе все файлы с компа №1 и синхронизировать его через XCOPY или ROBOCOPY. Но проблема в том, что синхронизируемая директория на компе №1 довольно большая (более 100 000 файлов, ну и размер соответствующий). Вопрос по большому счёту в том, как создать список файлов компа №1 и как на компе №2 этот список обработать.
Автор: magistrfet
Дата сообщения: 08.03.2009 16:53
можно ли вызвать готовый батник, реализованный с меню
из другой программы, так, чтобы указать например выбор при меню, к примеру есть install.bat, в нем меню с 4-мя пунктами, как вызвать из другой программы сразу запуск 4-ого пункта без доп. нажатий?
Автор: NvvLazyTiger
Дата сообщения: 08.03.2009 17:10
bk99
Цитата:
Но проблема в том, что синхронизируемая директория на компе №1 довольно большая (более 100 000 файлов, ну и размер соответствующий).

Строго говоря, основная проблема не в этом (сменный носитель нужного объёма - не проблема в наши дни;), а в другом:
Цитата:
В идеале хорошо бы учитывать и даты создания файлов и заменять более старые файлы, расположенные на компе №1, более новыми файлами с компа №2.

Т.е. (по контексту) оба компа "живут каждый своей жизнью", но требуется как-то синхронизировать их файлы. Модель "ведущий/ведомый" (комп№2/комп№1) в этом случае не корректна, т.к. рано или поздно какое-то "новое" на ведомом будет утрачено.

Такая задача имеет сравнительно простое решение только при наложении одного из двух жёстких условий:на "ведомом" компе невозможно изменение файлов в контролируемой папке;
на "ведомом" компе требуется именно "зеркало" ведущего В случае a. можно строить список наличия на ведомом и... "далее со всеми остановками" (но зато не столь обязательно полное зеркало на сменном носителе).
В случае b. оное [полное] зеркало обязательно, но в целом задача проще.

... Или придётся смириться с ситуацией "кто в лес, кто по дрова"... ;)

BTW Условие новее априори сомнительно-c ("часы у всех свои";). Правильнее - строить/сравнивать CRC/MD5/etc.

?
Автор: Elroir
Дата сообщения: 08.03.2009 17:36
magistrfet
Все зависит от того, как организовано меню в install.bat. Если с помощью "goto METKA", тогда можно, например, вызывать install.bat с параметром 1 (или 2,3,4), а внутри прописать (в самом начале):

Код:
if "%~1"=="1" goto МЕТКА1
if "%~1"=="2" goto МЕТКА2
if "%~1"=="3" goto МЕТКА3
if "%~1"=="4" goto МЕТКА4
Автор: magistrfet
Дата сообщения: 08.03.2009 19:29
Elroir
да, именно так, а параметр использовать типа
install.bat -1(в зависимости от выбора)? так не выходит

Добавлено:
аа , сорри, ну да - просто, без минуса. спс
Автор: bk99
Дата сообщения: 09.03.2009 12:32
NvvLazyTiger
Да нет же, ты не понял! Просто помоги мне
Цитата:
как создать список файлов компа №1 и как на компе №2 этот список обработать.
Как всё это в батнике организовать или скрипт какой-нибудь простенький... Без дискуссий... Тупо подскажи мне как создать список файлов в директории со семи путями и подпапками. И как потом скопировать на флешку только те файлы из указанной директории, которые отсутствуют в списке. Оставим пока даты создания, контрольные суммы и прочее.
Автор: BorlandIMHO
Дата сообщения: 09.03.2009 14:56
bk99
Код: set SOURCEDISK=d:
set DESTDISK=f:
for /R %SOURCEDISK%\ %%N in (*) do (
if not exist "%DESTDISK%%%~pnxN" copy "%SOURCEDISK%%%~pnxN" "%DESTDISK%%%~pnxN"
)
Автор: apy
Дата сообщения: 10.03.2009 11:46
Добрый день!
Помогите пожалуйста со скриптом.
Есть текстовый файл File.txt нужно в этом файле 6 строку заменить другими данными.
В моём скрипте почему-то не работает счетчик.

SET /A ln=0
FOR /F "skip=%ln% tokens=*" %%A IN (File.txt) DO (IF /I NOT %ln%==6 (echo %%A >>Fileout.txt) else (echo ======= >>Fileout.txt)) & set /A ln+=1
Автор: Widok
Дата сообщения: 10.03.2009 12:40

Лимит страниц. Продолжаем здесь

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172

Предыдущая тема: DVD-video (ДВД-видео) - что и как (часть 3)


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