Войти

Показать полную графическую версию : Автоматическое удаление части имени файла


Trm007
29-01-2020, 16:11
Задача : Есть Папка D:\Test . В папке находятся подкаталоги : test1, temp1 итд... Кол-во подкаталогов не ограничено. Имена рандомные.
Помогите допилить скрипт.
Задача скрипта : Проход по всем подкаталогам и удаление части имени файлов, которые в них находятся, до разделителя "_" включительно. Пример : был файл PS-E9SSS1A 2_M71640, стал M71640
Сам скрипт (рабочий, но не проходит подкаталоги):

@echo off
setlocal enableextensions enabledelayedexpansion
2>nul pushd D:\Test && (
for /f "usebackq delims=" %%i in (
`2^>nul dir /b /a:-d`
) do (
set sVar=%%~i
ren "%%~i" "!sVar:*_=!"
)
popd
) || (
echo Can't find source folder [D:\Test]
exit /b 1
)

endlocal
exit /b 0

alpap
29-01-2020, 17:08
вопрос 1
что делать с файлами вида: PS_E9SSS1A 2_M71640
-------------
вопрос 2
что делать с файлами:
PS-E9SSS1A 2_M71640
PP-E9SSS1A 2_M71640
PS-E9SSS1A 3_M71640

Trm007
29-01-2020, 17:15
1.Файлы вида PS_E9SSS1A 2_M71640 переименовываются в файлы вида M71640
2.Файлы вида
PS-E9SSS1A 2_M71640
PP-E9SSS1A 2_M71640
PS-E9SSS1A 3_M71640
Не предусмотрены, все имена уникальны.
Выше указаны скрипт, корректно работает в в папке D:\Test, но нет прохода по подкаталогам.

вопрос 1
что делать с файлами вида: PS_E9SSS1A 2_M71640
Не верно прочитал. В файлах тоже используется толь-ко 1 разделитель. Файлов с двумя "_" нет

Iska
29-01-2020, 18:00
…Не предусмотрены, все имена уникальны. »
В файлах тоже используется толь-ко 1 разделитель. Файлов с двумя "_" нет »
Предусмотрено, не предусмотрено — это не важно. Вы напишите, что делать, когда такое встретится.

Trm007
29-01-2020, 18:04
…Не предусмотрены, все имена уникальны. »
В файлах тоже используется толь-ко 1 разделитель. Файлов с двумя "_" нет »
Предусмотрено, не предусмотрено — это не важно. Вы напишите, что делать, когда такое встретится.

Такое не встретится.

Поэтому и не указывались данные условия. Ани не нужны.

megaloman
29-01-2020, 18:30
@Echo Off
Set "FileIn=Z:\Soft_In\*_*.*"

FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%FileIn%" /B /A:-D /S`) Do (
Set "Name=%%~nf"
Call Ren "%%f" "%%Name:*_=%%%%~xf"
)

Trm007
29-01-2020, 18:38
не работает

Trm007
29-01-2020, 19:07
Путь прописан корректно, рус символов нет.

Trm007, Что значит, "не работает" - Вы свой путь файлов с маской прописали? Там, случаем, в батнике нет русских символов? »

Перепроверил несколько раз, заработал. Спасибо большое.

Iska
29-01-2020, 21:14
Такое не встретится. »
Не встретится «\», «?» и «*» в имени файла. А вышеперечисленное — вполне. И, по-хорошему, надо об этом думать заранее и как-то обрабатывать.

megaloman
29-01-2020, 23:43
Iska, Есть конкретная задача. Похоже, файлы делаются неким софтом с жестким форматом имени, и утверждение, что в имени только один знак "_" обосновано.
@Echo OFF
Set "FileIn=Z:\Тра та та\*_*.*"

FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%FileIn%" /B /A:-D /S`) Do (
Call :NewName "%%~nf"
Call Ren "%%f" "%%Name:*_=%%%%~xf" ||Call Echo Ren "%%f" "%%Name:*_=%%%%~xf"
)
Exit /B

:NewName
Set "Name=%~1"
:Begin
Set "Name1=%Name%"
Set "Name=%Name1:*_=%"
If Not "%Name%"=="%Name1%" GoTo :Begin
Exit /BНо всё равно, ИМХО, в CMD не все знаки в имени можно просто обработать.

Iska
30-01-2020, 03:29
megaloman, я это понимаю. Но правильный подход к проектированию требует предусмотреть все возможные случаи.




© OSzone.net 2001-2012