Показать полную графическую версию : [решено] Удалить у всех файлов в папке первые 4 символа в имени
habib2302
06-04-2019, 21:57
Доброе время суток. Я не силен в CMD/BAT, поэтому прошу помощи. Нужно удалить у всех файлов в папке первые 2 символа в имени не затрагивая расширение файла. У меня имеется готовый батник, но только на удаление последних 2 символов.
@echo off
setlocal enabledelayedexpansion
for %%i in ( *.* ) do (
set "name=%%~ni"
set "name=!name:~0,-2!"
rename "%%~i" !name!%%~xi
echo !name!%%~xi
)
pause
habib2302, тут где-то рядышком сегодня один уже удаляли...
habib2302
06-04-2019, 22:08
mwz, скорей всего это http://forum.oszone.net/thread-335923.html
habib2302, ну и замените количество хоть на два (как у вас в тексте), хоть на четыре (как у вас в заголовке темы).
habib2302
06-04-2019, 22:25
mwz, пробовал. не работает. Ошибка в синтаксисе команды.
@echo off
setlocal enabledelayedexpansion
for %%i in ( *.* ) do (
set "name=%%~ni"
set "name=!name:~4!"
rename "%%~i" !name!%%~xi
echo !name!%%~xi
)
pause
habib2302,
когда копипастите откуда-то следите за пробелами в конце строк - очень распространенная ошибка причина и имя файла и путь когда в переменной надо обязательно брать в парные кавычки
@echo off
setlocal enabledelayedexpansion
for %%i in (*.*) do (
set "name=%%~ni"
set "name=!name:~4!"
ren "%%~i" "!name!%%~xi"
)
pause
@echo off
setlocal enableextensions enabledelayedexpansion
for %%i in (*.*) do (
set "name=%%~ni"
rename "%%~i" "!name:~4!%%~xi"
)
endlocal
exit /b 0
habib2302, в любом случае — делать rename файлов внутри цикла перебора тех же самых файлов по for — не есть правильно. Делайте разбор по for /f для команды dir /b — и вот тогда смело переименовывайте: сначала выполнится dir /b, и только потом произойдёт первое переименование.
Update: припоздал.
Ошибка в синтаксисе команды »
На время отладки строку @echo off надо убирать. И смотреть, где ошибка (ошибки).
Да, и у вас заодно от имени батника отрежутся символы. ;)
Кстати... А что вы будете делать, если получите одинаковые имена переименованных файлов?
megaloman
08-04-2019, 15:37
habib2302, Одно неверное движение, и ты отец ...ИМХО, указывать имена файлов *.* опрометчиво. При повторном возможно случайном запуске батника тупо повторно отрежутся символы. Подозреваю, можно указать маску, чтобы повторно файлы не обрабатывались.Да, и у вас заодно от имени батника отрежутся символы. »ИМХО, скверная политика запускать батник из той же папки, где обрабатываемые файлы. Поэтому, для обрабатываемых файлов лучше указывать полный путь с маской, и, (но это не нужно, если не располагать батник вместе с файлами) можно приделать батнику атрибут "скрытый".
До кучи (число отрезаемых символов тоже задаётся, а то завтра кто-то захочет отрезать 2 или 5 символов)@Echo Off
Set "FileIn=Z:\Box_In\я*.txt"
Set /A N=4
Attrib +H "%~dpnx0"
FOR %%i IN ("%FileIn%") DO (Set "NN=%%~ni" &Call Ren "%%i" "%%NN:~%N%%%%%~xi")
Exit /B 0
Или, как вариант, перед обрезанием контролировать длину, чтобы не отрезать повторно: возможно, обрабатываемые файлы имеют некое стандартное по длине имя. Или всё-таки на каждое переименование организовать запрос. Но это слегка другая песТня, излагайте!
megaloman
08-04-2019, 16:32
в любом случае — делать rename файлов внутри цикла перебора тех же самых файлов по for — не есть правильно »@Echo Off
Set "FileIn=Z:\Box_In\я*.txt"
Set /A N=4
>"%~dpn0.tmp%~x0" (FOR %%i IN ("%FileIn%") DO (
Set "NN=%%~ni"
Call Echo Ren "%%i" "%%NN:~%N%%%%%~xi"
))
Attrib +H "%~dpnx0"
Attrib +H "%~dpn0.tmp%~x0"
Call "%~dpn0.tmp%~x0"
Attrib -H "%~dpnx0"
Attrib -H "%~dpn0.tmp%~x0"
Del "%~dpn0.tmp%~x0"
Exit /B 0
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.