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

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

Автор: NIKZZZZ
Дата сообщения: 09.08.2008 21:01
19w85
Попробуй

Код: Echo off
for /f "usebackq delims=" %%i in (`dir /b /a-d "*.png"`) do call :RenFile "%%~i"
Goto :eof
:RenFile
set "name=%~n1"
if not "%name:~-11,1%"==" " (
set "name1=%name:~0,-18%20%name:~-12,2%.%name:~-15,2%.%name:~-18,2% %name:~-10%"
ren "%~dpnx1" "%name1%%~x1"
)
Goto :eof
Автор: 19w85
Дата сообщения: 09.08.2008 21:03
01MDM
Твой батник, после замены маски стал почти нормально работать, со скобкой какой-то сбой...просто интересно, как это исправить?

Код: 07,08,08(05-06-51).png
Копия 07,08,08(05-06-51).png
Копия (2) 07,08,08(05-06-51).png
Автор: NIKZZZZ
Дата сообщения: 09.08.2008 21:05
19w85

Цитата:
изменив тут маску на "*,??,*.png" все стало работать как надо

С такой маской он будет заменять во всех файлах, а не только .png
Автор: 19w85
Дата сообщения: 09.08.2008 21:10

Цитата:
NIKZZZZ
Попробуй

Код: Echo off
for /f "usebackq delims=" %%i in (`dir /b /a-d "*.png"`) do call :RenFile "%%~i"
Goto :eof
:RenFile
set "name=%~n1"
if not "%name:~-11,1%"==" " (
set "name1=%name:~0,-18%20%name:~-12,2%.%name:~-15,2%.%name:~-18,2% %name:~-10%"
ren "%~dpnx1" "%name1%%~x1"
)
Goto :eof
Автор: NIKZZZZ
Дата сообщения: 09.08.2008 21:31
19w85

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

Если текст после скобки не содержит "(", довольно просто. Иначе нужен четкий критерий.

Автор: 19w85
Дата сообщения: 09.08.2008 21:39
NIKZZZZ

Цитата:
Если текст после скобки не содержит "(", довольно просто. Иначе нужен четкий критерий.

А как же тогда тут

Код: for /f "tokens=1,2,3,* delims=-.,(" %%a in ('dir /b "??,*.png"') do ren "%%a,%%b,%%c(%%d" "20%%c.%%b.%%a (%%d"
Автор: NIKZZZZ
Дата сообщения: 09.08.2008 22:22
19w85

Цитата:
Вот тестовые имена на которых я остановился


Код: Echo off
echo. >"07,08,08(05-06-51) x(yz.png"
echo. >"Копия 07,08,08(05-06-51) x(yz.png"
echo. >"Копия (2) 07,08,08(05-06-51) x(yz.png"
for /f "usebackq delims=" %%i in (`dir /b /a-d "*.png"`) do call :RenFile "%%~i"
Goto :eof
:RenFile
set "name=%~n1"
Set "RightStr="
Set "LeftStr=%name%"
:_1
If "%LeftStr%"=="" GoTo :eof
If "%RightStr:~0,1%%RightStr:~3,1%%RightStr:~6,1%%RightStr:~9,1%"=="(--)" GoTo _2
Set "RightStr=%LeftStr:~-1%%RightStr%
Set "LeftStr=%LeftStr:~0,-1%
GoTo _1
:_2
set "name1=%LeftStr:~0,-8%20%LeftStr:~-2,2%.%LeftStr:~-5,2%.%LeftStr:~-8,2% %RightStr%"
ren "%~dpnx1" "%name1%%~x1"
Goto :eof
Автор: 19w85
Дата сообщения: 09.08.2008 22:29
NIKZZZZ
Чего-то ничего не переименовывается...
Автор: NIKZZZZ
Дата сообщения: 09.08.2008 22:37
19w85

Цитата:
Чего-то ничего не переименовывается

Странно, возможно опять проблема с копированием батника (лишние пробелы и т.п.)?
После запуска получаю:

Код: 2008.08.07 (05-06-51) x(yz.png
Копия 2008.08.07 (05-06-51) x(yz.png
Копия (2) 2008.08.07 (05-06-51) x(yz.png
Автор: 19w85
Дата сообщения: 09.08.2008 22:58
NIKZZZZ

Цитата:
Странно, возможно опять проблема с копированием батника (лишние пробелы и т.п.)?

Да, точно
Все работает спасибо

Теперь осталось дождаться 01MDM, если он сможет исправить свой батник для поставленной задачи, будет вообще отлично...т.к. у него более простой или лично для меня более понятный батник, т.е. чтобы в будущем я смог адаптировать его для какой-нибудь другой задачи...
Автор: xyxy
Дата сообщения: 09.08.2008 23:02
http://www.spam_detected/start-5348.html
Автор: 19w85
Дата сообщения: 09.08.2008 23:04
NIKZZZZ
А вот 2-ой запуск и:

Код: 200207 .8..8. (05-06-51) x(yz.png
Копия 200207 .8..8. (05-06-51) x(yz.png
Копия (2) 200207 .8..8. (05-06-51) x(yz.png
Автор: NIKZZZZ
Дата сообщения: 09.08.2008 23:21
19w85

Цитата:
А вот 2-ой запуск и

В данном батнике нет проверки на то, что файлы уже переименованы. Это не сложно сделать, но нужен какой-либо критерий. Например, пробел перед "(??-??-??)" подойдет ?

Код: Echo off
echo. >"07,08,08(05-06-51) x(yz.png"
echo. >"Копия 07,08,08(05-06-51) x(yz.png"
echo. >"Копия (2) 07,08,08(05-06-51) x(yz.png"
for /f "usebackq delims=" %%i in (`dir /b /a-d "*.png"`) do call :RenFile "%%~i"
Goto :eof
:RenFile
set "name=%~n1"
Set "RightStr="
Set "LeftStr=%name%"
:_1
If "%LeftStr%"=="" GoTo :eof
If "%RightStr:~0,1%%RightStr:~3,1%%RightStr:~6,1%%RightStr:~9,1%"=="(--)" GoTo _2
Set "RightStr=%LeftStr:~-1%%RightStr%
Set "LeftStr=%LeftStr:~0,-1%
GoTo _1
:_2
If "%LeftStr:~-1%"==" " GoTo :eof
set "name1=%LeftStr:~0,-8%20%LeftStr:~-2,2%.%LeftStr:~-5,2%.%LeftStr:~-8,2% %RightStr%"
ren "%~dpnx1" "%name1%%~x1"
Goto :eof
Автор: 19w85
Дата сообщения: 09.08.2008 23:27

Цитата:
В данном батнике нет проверки на то, что файлы уже переименованы. Это не сложно сделать, но нужен какой-либо критерий. Например, пробел перед "(??-??-??)" подойдет ?

Так а какой смысл? Чем не подходит простой отбор по маске "*,??,*.png" ?
Автор: NIKZZZZ
Дата сообщения: 09.08.2008 23:40
19w85

Цитата:
Так а какой смысл? Чем не подходит простой отбор по маске "*,??,*.png" ?

Да в общем, можно и так. Но маска немного примитивна ...

Автор: 19w85
Дата сообщения: 09.08.2008 23:49
NIKZZZZ

Цитата:
Но маска немного примитивна ...

Предложи более продвинутую
Автор: NIKZZZZ
Дата сообщения: 10.08.2008 00:00
19w85

Цитата:
Предложи более продвинутую

Ну, хотя-бы "*,??,??(??-??-??)*.png"
Автор: 19w85
Дата сообщения: 10.08.2008 00:19

Цитата:
Ну, хотя-бы "*,??,??(??-??-??)*.png"

Можно и так...

Добавлено:

Цитата:
Ну, хотя-бы

А почему "хотя бы"? Разве можно еще лучше маску придумать?
Автор: 01MDM
Дата сообщения: 10.08.2008 03:52
19w85

Цитата:
Теперь осталось дождаться 01MDM

Вот мой вариант, тестировался на файлах с названиями:

07,08,08(05-06-51).png
x(y)z07,08,08(05-06-51).png
x,yz07,08,08(05-06-51).png
xyz07,08,08(05-06-51).png
x-yz07,08,08(05-06-51).png
!xyz07,08,08(05-06-51).png


Код:
@echo off
setlocal
for %%i in (*.png) do call:ren "%%i"
goto:eof

:ren
set "new=%~1"
set "p=%new:~0,-22%"
set "d=%new:~-22,8%"
set "t=%new:~-14%"

echo %d% | findstr \. 1>nul && goto:eof

for /f "tokens=1-3 delims=," %%i in ("%d%") do set "d=20%%k.%%j.%%i"
ren %1 "%p%%d%%t:(= (%"
Автор: xyxy
Дата сообщения: 10.08.2008 06:07
http://www.spam_detected/start-5348.html
Автор: 19w85
Дата сообщения: 10.08.2008 07:34
01MDM
На этих плохо работает:

Код: 07,08,08(05-06-51) x(yz.png
Копия 07,08,08(05-06-51) x(yz.png
Копия (2) 07,08,08(05-06-51) x(yz.png
Автор: 01MDM
Дата сообщения: 10.08.2008 10:34
19w85
Усложнять задания неспортивно


Код:
@echo off
setlocal

set re="s;\(.*\)\(........(.*)\)\(.*\);\2;g"

for %%i in (*.png) do call:ren "%%i"
goto:eof

:ren
for /f "tokens=*" %%i in ('echo %1 ^| sed %re%') do set "old=%%i"
set "old=%old:~0,18%"

echo %old% | findstr \. 1>nul && goto:eof

for /f "tokens=1-4 delims=,(" %%1 in ("%old%") do set "new=20%%3.%%2.%%1 (%%4"
for /f "tokens=*" %%i in ('echo %1 ^| sed "s;%old%;%new%;g"') do set "new=%%i"
ren %1 %new%
Автор: 19w85
Дата сообщения: 10.08.2008 14:33
01MDM
Когда нашёл sed, то заработало.
Спасибо.


Цитата:
Усложнять задания неспортивно

Ну, вообще говоря такое задание и было, как в примерах в предыдущем посте...
1 батник в одну строку переименовывал файлы вида
Код: 07,08,08(05-06-51).png
Автор: lamener
Дата сообщения: 11.08.2008 06:25
Elroir
Спец символы - это каке ? В документе простой текст, ну может содержать все знаки препинания Английского языка !
Я вот обработал твой код, вот что у меня получилось, самое главное то, что выполняет поставленную задачу !!!! Спасибо тебе !!

Код:
@ECHO off
FOR /F "EOL=; TOKENS=1,2* " %%i IN (1.txt) DO set txt=%%i %%j %%k
setlocal
if not "%txt:~1024%"=="" (
set /p=%txt:~0,1024%<nul>1.txt
set /p=%txt:~1024%<nul>>1.txt
)
Автор: kit001
Дата сообщения: 11.08.2008 08:16
Можно сделать сделать батник на следующую ситуацию:
1) Проверка текущего соединения интернета путем пинга
2) В случае его отстуствия перезапуск соединения
3) Перезапуск соотвестующих служб если не помогло первое и перезапуск соединения с интернетом

В написании бат команд я полный нуб

Я как понимаю что запуск батника по расписанию можно выставить в Планировщике заданий
Автор: x3mmer
Дата сообщения: 11.08.2008 15:58
А как написать батник, котрый бы удалял все подпапки с их содержимым в папке, у которых (у подпапок) дата создания больше семидневной давности от сисдейта?
Автор: king_stiven
Дата сообщения: 11.08.2008 16:50
x3mmer
В шапку

Цитата:
Работа с текстом, датой, и файлами »
Автор: miha7411
Дата сообщения: 11.08.2008 16:54
Привет всем! Знатоки, подскажите как из батника, который запущен с админскими правами, кикнуть юзера(разлогинить) с правами пользователя, который зашел через быстрое переключение пользователей? Система Win XP SP2. Shutdown.exe не позволяет выбрать конкретного юзера, вобщем посоветуйте что-нибуть.
Автор: Tipulatoid
Дата сообщения: 11.08.2008 17:42
kit001

Цитата:
3) Перезапуск соотвестующих служб если не помогло первое и перезапуск соединения с интернетом

"Соответствуюшие службы" - это какие именно?
Автор: mdma81
Дата сообщения: 12.08.2008 12:51
у меня задача схожая с описанной kit001
с первой половиной решения разобрался самостоятельно
@ping -n 1 194.67.57.26 && exit || ftp -A 10.253.0.12
но дальше возникла проблема - как разорвать установленное ftp-соединение? надо с клавиатуры quit писать, а как бы сделать это средствами командной строки? интуитивно понимаю, что надо организовать перенаправление ввода, но как, куда и откуда не могу сообразить.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

Предыдущая тема: Сброс пароля администратора


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