0 / 0 / 0
Регистрация: 25.10.2015
Сообщений: 71
1

Шаблон для фильтрации файлов с именами из восьми цифр

30.10.2015, 19:59. Показов 1612. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Windows Batch file
1
2
3
4
5
chcp 1251 >nul
@echo off
set thePath_1=G:\tmp
set prefix_1=до235 - 
for /f "delims=" %%i in ('dir /b /a-d "%thePath_1%\????????.doc"') do (ren "%thePath_1%\%%i" "%prefix_1%%%i")
Уважаемые! При такой схеме переименовываются ВСЕ ФАЙЛЫ в каталоге с разными именами, а мне нужно чтобы переименовывались ТОЛЬКО те, которые имеют последовательность из 8 цифр 22222222.doc, а остальные не трогались вообще.
Как прописать подскажите, пожалуйста?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.10.2015, 19:59
Ответы с готовыми решениями:

Дано пять масок для фильтрации имен файлов.
Помогите пожалуйста!!!! Дано пять масок для фильтрации имен файлов. Расположите номера этих...

Задание маски для фильтрации файлов без расширения
Есть куча файлов без расширения (результат работы ansis), для обработки требуется задать разрешение...

Распределение файлов в папках по подпапкам с именами, соответствующими именам этих файлов
Распределение файлов в папках по подпапкам с названием подпапок как файл. например в папке 0005...

Копирование файлов из разных каталогов в каталоги с именами, соответствующими номерам в именах файлов
Добрый день! Помогите решить проблему. Есть семь папок (cam_1, cam_2, cam_3 и.т.д) с фотографиями...

11
Покинул форум
3672 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
30.10.2015, 21:21 2
Windows Batch file
1
2
3
4
5
6
7
8
9
<# :
  @echo off
    powershell /nop /ex bypass /com ^
    "&{[ScriptBlock]::Create((gc '%~f0') -join [Char]10).Invoke()}"
  exit /b
#>
 
ls G:\tmp | ? {!$_.PSIsContainer -and $_.BaseName.Length -eq 8 -and ([Regex]'\b\d+(?!\w+)\.doc\b').IsMatch($_.Name)} |
% {$i = 1}{ren $_.Name "$($_.BaseName)_до235 - $i$($_.Extension)";$i++}
0
0 / 0 / 0
Регистрация: 25.10.2015
Сообщений: 71
30.10.2015, 21:39  [ТС] 3
Ув.! Спасибо и Вам за отклик, но пока не получилось.
Более того не думал что нужен Powershell для такой маски (

Уточню ТЗ. Есть 2 (два) файла в одной папке:
22222222.doc
Ухвала 2015 -22222233.doc

Мне нужно что бы файлу 22222222.doc было присвоено такое имя: Ухвала 2015 -22222222.doc, а этот файл "Ухвала 2015 -22222233.doc" остался без изменений.

Более того, папок у меня (типа tmp) будет 10, а потому я не мог правильно изложить ТЗ так как не знал что тут PS.
Думал потом по аналогии сделаю свои еще 10 вариантов в строчки в батнике и все, а тут такое получилось непонятно...(((
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
30.10.2015, 22:57 4
Лучший ответ Сообщение было отмечено ComSpec как решение

Решение

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@echo off
SetLocal EnableExtensions
 
set "prefix_1=Ухвала 2015 - "
set thePath_1=G:\tmp
 
call :renme "%thePath_1%" "%prefix_1%"
 
 
pause
goto :eof
 
:renme [Path] [Prefix]
for /f "delims=" %%i in ('dir /b /a-d "%~1\????????.doc"^|findstr /RC:"^[\][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\.doc$"') do ren "%~1\%%i" "%~2%%i"
exit /b
2
Эксперт Python
5418 / 3842 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
30.10.2015, 23:00 5
1) Для реального переименования убрать параметр -WhatIf
2) Указывая список путей использовать в конце нужно \* для указания на контейнер.
Параметр -rec (-recurse) можно убрать, если не нужен просмотр еще и подпапок.
3) Внутри команды использовать только одиночные кавычки, либо экранировать их знаком \.
4) Шаблон '^(\d+)$' можно заменить для более точного указания числа цифр на
'^(\d{8})$'.
Windows Batch file
1
powershell -nop -ex bypass "&{dir '.\test\*','.\test\1\*','.\test\2\*' -rec -inc *.doc|%{$m=([regex]'^(\d+)$').Match($_.BaseName);if ($m.Success){ren $_ "Ухвала 2015 -$($_.name)" -WhatIf}}}"
1
0 / 0 / 0
Регистрация: 25.10.2015
Сообщений: 71
30.10.2015, 23:18  [ТС] 6
Ув! Dragokas! Ваш вариант начал отрабатывать и он заработал, НО, если указывать путь set thePath_1="G:\tmp" в кириллице, то ничего не работает. chcp 1251 >nul в начале батника также присутствует.
0
Эксперт Python
5418 / 3842 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
30.10.2015, 23:20 7
Форум скушал слеши в паре мест. Когда наконец движок починят?
"Ухвала 2015 -$($_.name)" - слэши должны быть перед кавычками.
1
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
30.10.2015, 23:24 8
mrhamster, пересохраните батник в кодировке oem866.
chcp 1251 не потребуется.
1
0 / 0 / 0
Регистрация: 25.10.2015
Сообщений: 71
30.10.2015, 23:37  [ТС] 9
не получает все равно. "не удается найти указанный путь" если путь в кириллице, и кириллицу после OEM 866 "крутит"...
0
3460 / 1998 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
30.10.2015, 23:38 10
Лучший ответ Сообщение было отмечено ComSpec как решение

Решение

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@echo off
 
>nul chcp 1251
 
set "thePath_1=G:\tmp"
set "prefix_1=до235 - "
 
set "n=8"
set "p=.doc"
 
pushd "%thePath_1%"&& ((for /f "delims=" %%i in ('
 2^>nul dir/a-d/b "*%p%"^| cmd/v/c "(for /l %%i in (1 1 %n%) do @set p=[0-9]!p:.^^=\.!)& findstr/ix !p!"
') do ren "%%i" "%prefix_1%%%i")& popd)
 
exit/b
2
0 / 0 / 0
Регистрация: 25.10.2015
Сообщений: 71
31.10.2015, 00:33  [ТС] 11
Ув.! Dragokas. Задача решена! Даже организовал реализацию скрипта через 2 (два) параметра prefix и thePath (а мне их нужно много), однако, после выполнения каждого из них (например prefix_1 и thePath_1) окно CMD выдает вероятно команду "Для завершения нажмите любую клавишу...", а после выполнения второй части prefix_2 и thePath_2 также выдает подобное предложения, но скрипт работает. А как вообще меня не спрашивать в процессе и закрыть автоматом окно cmd в конце выполнения скрипта?

Добавлено через 19 минут
Все господа! Сделал обработку двух путей, а запрос на закрытие остался лишь один и в конце... Осталось разобраться с автоматическим закрытием окна. Спасибо Вам Братья и Сестры - Словяне!
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
31.10.2015, 00:44 12
Цитата Сообщение от mrhamster Посмотреть сообщение
А как вообще меня не спрашивать в процессе и закрыть автоматом окно cmd в конце выполнения скрипта?
убрать
Windows Batch file
1
pause
0
31.10.2015, 00:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.10.2015, 00:44
Помогаю со студенческими работами здесь

Распределение файлов в папках по подпапкам с именами, соответствующими части имен этих файлов
Есть много пдф файлов с адресами в названии ул. Комсомольская, д. 10 (1 ввод) ул....

Создание папок с именами заданных файлов и перемещение этих файлов в созданные папки
Подскажите пожалуйста как по названиям файлов txt создать папки и положить в каждую из папок файл с...

Перемещение файлов в каталоги, создаваемые в соответствии с именами или частями имён этих файлов
Добрый день. Прошу помочь. Задача: в текущем каталоге имеется N-ое кол-во файлов с определенными...

Копирование файлов по списку в текстовом файле в папки с именами, соответствующими расширениям этих файлов
Добрый день, уважаемые форумчане. Прошу помощи с написанием bat-файла. Значит задача такая. Есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru