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

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

habib2302 06-04-2019 21:57 2866894

Удалить у всех файлов в папке первые 4 символа в имени
 
Доброе время суток. Я не силен в 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


mwz 06-04-2019 22:05 2866895

habib2302, тут где-то рядышком сегодня один уже удаляли...

habib2302 06-04-2019 22:08 2866898

mwz, скорей всего это http://forum.oszone.net/thread-335923.html

mwz 06-04-2019 22:13 2866899

habib2302, ну и замените количество хоть на два (как у вас в тексте), хоть на четыре (как у вас в заголовке темы).

habib2302 06-04-2019 22:25 2866901

mwz, пробовал. не работает. Ошибка в синтаксисе команды.
Код:

@echo off
setlocal enabledelayedexpansion
for %%i in ( *.* ) do (
set "name=%%~ni"
set "name=!name:~4!"
rename "%%~i" !name!%%~xi
echo !name!%%~xi
)
pause


alpap 06-04-2019 23:00 2866907

habib2302,
когда копипастите откуда-то следите за пробелами в конце строк - очень распространенная ошибка причина и имя файла и путь когда в переменной надо обязательно брать в парные кавычки
Код:

@echo off
setlocal enabledelayedexpansion

for %%i in (*.*) do (
 set "name=%%~ni"
 set "name=!name:~4!"
 ren "%%~i" "!name!%%~xi"
)
pause


Iska 06-04-2019 23:03 2866908

Код:

@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: припоздал.

mwz 06-04-2019 23:04 2866909

Цитата:

Цитата habib2302
Ошибка в синтаксисе команды »

На время отладки строку @echo off надо убирать. И смотреть, где ошибка (ошибки).
Да, и у вас заодно от имени батника отрежутся символы. ;)

Кстати... А что вы будете делать, если получите одинаковые имена переименованных файлов?

megaloman 08-04-2019 15:37 2867072

habib2302,
Цитата:

Цитата Жванецкий (?)
Одно неверное движение, и ты отец ...

ИМХО, указывать имена файлов *.* опрометчиво. При повторном возможно случайном запуске батника тупо повторно отрежутся символы. Подозреваю, можно указать маску, чтобы повторно файлы не обрабатывались.
Цитата:

Цитата mwz
Да, и у вас заодно от имени батника отрежутся символы. »

ИМХО, скверная политика запускать батник из той же папки, где обрабатываемые файлы. Поэтому, для обрабатываемых файлов лучше указывать полный путь с маской, и, (но это не нужно, если не располагать батник вместе с файлами) можно приделать батнику атрибут "скрытый".
До кучи (число отрезаемых символов тоже задаётся, а то завтра кто-то захочет отрезать 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 2867078

Цитата:

Цитата Iska
в любом случае — делать 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



Время: 23:19.

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