CMD/BAT - Автоматическое удаление части имени файла
-
Trm007
CMD/BAT - Автоматическое удаление части имени файла
Задача : Есть Папка 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
Помогите допилить скрипт.
Задача скрипта : Проход по всем подкаталогам и удаление части имени файлов, которые в них находятся, до разделителя "_" включительно. Пример : был файл 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
Re: CMD/BAT - Автоматическое удаление части имени файла
вопрос 1
что делать с файлами вида: PS_E9SSS1A 2_M71640
-------------
вопрос 2
что делать с файлами:
PS-E9SSS1A 2_M71640
PP-E9SSS1A 2_M71640
PS-E9SSS1A 3_M71640
что делать с файлами вида: PS_E9SSS1A 2_M71640
-------------
вопрос 2
что делать с файлами:
PS-E9SSS1A 2_M71640
PP-E9SSS1A 2_M71640
PS-E9SSS1A 3_M71640
-
Iska
Re: CMD/BAT - Автоматическое удаление части имени файла
megaloman, я это понимаю. Но правильный подход к проектированию требует предусмотреть все возможные случаи.
-
Trm007
Re: CMD/BAT - Автоматическое удаление части имени файла
Цитата Trm007:
…Не предусмотрены, все имена уникальны.
Цитата Trm007:
В файлах тоже используется толь-ко 1 разделитель. Файлов с двумя "_" нет
Предусмотрено, не предусмотрено — это не важно. Вы напишите, что делать, когда такое встретится.
…Не предусмотрены, все имена уникальны.
CMD/BAT - Автоматическое удаление части имени файла
Цитата Trm007:
В файлах тоже используется толь-ко 1 разделитель. Файлов с двумя "_" нет
CMD/BAT - Автоматическое удаление части имени файла
Предусмотрено, не предусмотрено — это не важно. Вы напишите, что делать, когда такое встретится.
-
Iska
Re: CMD/BAT - Автоматическое удаление части имени файла
Цитата Iska:
Цитата Trm007:
…Не предусмотрены, все имена уникальны.
Цитата Trm007:
В файлах тоже используется толь-ко 1 разделитель. Файлов с двумя "_" нет
Предусмотрено, не предусмотрено — это не важно. Вы напишите, что делать, когда такое встретится.
Такое не встретится.
Поэтому и не указывались данные условия. Ани не нужны.
Цитата Trm007:
…Не предусмотрены, все имена уникальны.
CMD/BAT - Автоматическое удаление части имени файла
Цитата Trm007:
В файлах тоже используется толь-ко 1 разделитель. Файлов с двумя "_" нет
CMD/BAT - Автоматическое удаление части имени файла
Предусмотрено, не предусмотрено — это не важно. Вы напишите, что делать, когда такое встретится.
Такое не встретится.
Поэтому и не указывались данные условия. Ани не нужны.
-
Trm007
Re: CMD/BAT - Автоматическое удаление части имени файла
Код:
Код: Выделить всё
@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"
)-
megaloman
Re: CMD/BAT - Автоматическое удаление части имени файла
Код:
Код: Выделить всё
@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
Re: CMD/BAT - Автоматическое удаление части имени файла
Путь прописан корректно, рус символов нет.
Цитата megaloman:
Trm007, Что значит, "не работает" - Вы свой путь файлов с маской прописали? Там, случаем, в батнике нет русских символов?
Перепроверил несколько раз, заработал. Спасибо большое.
Цитата megaloman:
Trm007, Что значит, "не работает" - Вы свой путь файлов с маской прописали? Там, случаем, в батнике нет русских символов?
»
Перепроверил несколько раз, заработал. Спасибо большое.
-
Trm007
Re: CMD/BAT - Автоматическое удаление части имени файла
Цитата Trm007:
Такое не встретится.
Не встретится «\», «?» и «*» в имени файла. А вышеперечисленное — вполне. И, по-хорошему, надо об этом думать заранее и как-то обрабатывать.
Такое не встретится.
CMD/BAT - Автоматическое удаление части имени файла
Не встретится «\», «?» и «*» в имени файла. А вышеперечисленное — вполне. И, по-хорошему, надо об этом думать заранее и как-то обрабатывать.
-
Iska
Re: CMD/BAT - Автоматическое удаление части имени файла
Iska, Есть конкретная задача. Похоже, файлы делаются неким софтом с жестким форматом имени, и утверждение, что в имени только один знак "_" обосновано.
Можно, конечно, учесть наличие нескольких "_" в имени.
При условии, что надо взять последнюю часть файла, вот вариант
[spoiler]Код: [/spoiler]
Но всё равно, ИМХО, в CMD не все знаки в имени можно просто обработать.
Можно, конечно, учесть наличие нескольких "_" в имени.
При условии, что надо взять последнюю часть файла, вот вариант
[spoiler]Код: [/spoiler]
Код: Выделить всё
@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 не все знаки в имени можно просто обработать.