Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Автоматическое удаление части имени файла (http://forum.oszone.net/showthread.php?t=343858)

Trm007 29-01-2020 16:11 2907499

Автоматическое удаление части имени файла
 
Задача : Есть Папка 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 2907507

вопрос 1
что делать с файлами вида: PS_E9SSS1A 2_M71640
-------------
вопрос 2
что делать с файлами:
PS-E9SSS1A 2_M71640
PP-E9SSS1A 2_M71640
PS-E9SSS1A 3_M71640

Trm007 29-01-2020 17:15 2907508

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 2907515

Цитата:

Цитата Trm007
…Не предусмотрены, все имена уникальны. »

Цитата:

Цитата Trm007
В файлах тоже используется толь-ко 1 разделитель. Файлов с двумя "_" нет »

Предусмотрено, не предусмотрено — это не важно. Вы напишите, что делать, когда такое встретится.

Trm007 29-01-2020 18:04 2907517

Цитата:

Цитата Iska (Сообщение 2907515)
Цитата:

Цитата Trm007
…Не предусмотрены, все имена уникальны. »

Цитата:

Цитата Trm007
В файлах тоже используется толь-ко 1 разделитель. Файлов с двумя "_" нет »

Предусмотрено, не предусмотрено — это не важно. Вы напишите, что делать, когда такое встретится.

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

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

megaloman 29-01-2020 18:30 2907522

Код:

@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 2907524

не работает

Trm007 29-01-2020 19:07 2907531

Путь прописан корректно, рус символов нет.

Цитата:

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

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

Iska 29-01-2020 21:14 2907540

Цитата:

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

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

megaloman 29-01-2020 23:43 2907562

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 2907569

megaloman, я это понимаю. Но правильный подход к проектированию требует предусмотреть все возможные случаи.


Время: 00:23.

Время: 00:23.
© OSzone.net 2001-