CMD/BAT - Автоматическое удаление части имени файла

Аватара пользователя
Trm007

CMD/BAT - Автоматическое удаление части имени файла

Сообщение Trm007 »

Задача : Есть Папка 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

Re: CMD/BAT - Автоматическое удаление части имени файла

Сообщение alpap »

вопрос 1

что делать с файлами вида: PS_E9SSS1A 2_M71640

-------------

вопрос 2

что делать с файлами:

PS-E9SSS1A 2_M71640

PP-E9SSS1A 2_M71640

PS-E9SSS1A 3_M71640
Аватара пользователя
Iska

Re: CMD/BAT - Автоматическое удаление части имени файла

Сообщение Iska »

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

Re: CMD/BAT - Автоматическое удаление части имени файла

Сообщение Trm007 »

Цитата Trm007:



…Не предусмотрены, все имена уникальны.
CMD/BAT - Автоматическое удаление части имени файла





Цитата Trm007:



В файлах тоже используется толь-ко 1 разделитель. Файлов с двумя "_" нет
CMD/BAT - Автоматическое удаление части имени файла




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

Re: CMD/BAT - Автоматическое удаление части имени файла

Сообщение Iska »

Цитата Iska:




Цитата Trm007:



…Не предусмотрены, все имена уникальны.
CMD/BAT - Автоматическое удаление части имени файла





Цитата Trm007:



В файлах тоже используется толь-ко 1 разделитель. Файлов с двумя "_" нет
CMD/BAT - Автоматическое удаление части имени файла




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



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



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

Re: CMD/BAT - Автоматическое удаление части имени файла

Сообщение Trm007 »

Код:

Код: Выделить всё

@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 - Автоматическое удаление части имени файла

Сообщение megaloman »

Код:

Код: Выделить всё

@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 - Автоматическое удаление части имени файла

Сообщение Trm007 »

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




Цитата megaloman:



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




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

Re: CMD/BAT - Автоматическое удаление части имени файла

Сообщение Trm007 »

Цитата Trm007:



Такое не встретится.
CMD/BAT - Автоматическое удаление части имени файла




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

Re: CMD/BAT - Автоматическое удаление части имени файла

Сообщение Iska »

Iska, Есть конкретная задача. Похоже, файлы делаются неким софтом с жестким форматом имени, и утверждение, что в имени только один знак "_" обосновано.



Можно, конечно, учесть наличие нескольких "_" в имени.

При условии, что надо взять последнюю часть файла, вот вариант

[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 не все знаки в имени можно просто обработать.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»