Показать полную графическую версию : Автоматическое удаление части имени файла
Задача : Есть Папка 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
вопрос 1
что делать с файлами вида: PS_E9SSS1A 2_M71640
-------------
вопрос 2
что делать с файлами:
PS-E9SSS1A 2_M71640
PP-E9SSS1A 2_M71640
PS-E9SSS1A 3_M71640
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 разделитель. Файлов с двумя "_" нет
…Не предусмотрены, все имена уникальны. »
В файлах тоже используется толь-ко 1 разделитель. Файлов с двумя "_" нет »
Предусмотрено, не предусмотрено — это не важно. Вы напишите, что делать, когда такое встретится.
…Не предусмотрены, все имена уникальны. »
В файлах тоже используется толь-ко 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, Что значит, "не работает" - Вы свой путь файлов с маской прописали? Там, случаем, в батнике нет русских символов? »
Перепроверил несколько раз, заработал. Спасибо большое.
Такое не встретится. »
Не встретится «\», «?» и «*» в имени файла. А вышеперечисленное — вполне. И, по-хорошему, надо об этом думать заранее и как-то обрабатывать.
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 не все знаки в имени можно просто обработать.
megaloman, я это понимаю. Но правильный подход к проектированию требует предусмотреть все возможные случаи.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.