Войти

Показать полную графическую версию : [решено] Скрипт по переименованию файлов


Patroklos
02-12-2017, 06:19
Здравствуйте, хочу переименовать файлы оставив только часть имени. Накидал скрипт но он не фунциклирует. И главное с echo пишет мне нужные названия файлов а с ren не работает. Подскажите пожалуйста где я портачу.
set SourceFolder=E:\20171130
setlocal enableextensions enabledelayedexpansion
for %%a in (%SourceFolder%\*.*) do (
set OrigName=%%~na
set ShortName=!OrigName:~-12,11!%%~xa
ren %SourceFolder%\%%~nxa !ShortName!
)

Iska
02-12-2017, 07:58
Есть ли в именах файлов «пробельные» символы, что будет, если имена заключить в кавычки:
ren "%SourceFolder%\%%~nxa" "!ShortName!"
? Покажите код с echo, и что он Вам пишет.

Patroklos
02-12-2017, 08:22
Блин, старею :(
Забыл про скобки. Спасибо.
Переименовало все файлы как надо, кроме тех
у которых в имени есть восклицательный знак.
Что то можно поделать?

megaloman
02-12-2017, 09:04
@Echo Off
set "SourceFolder=E:\20171130"

for %%a in (%SourceFolder%\*.*) do Call :RenFiles "%%a" -12 11
GoTo :Eof

:RenFiles
Set "OrigName=%~n1"
Call Set "ShortName=%%OrigName:~%2,%3%%%~x1"
ren %1 "%ShortName%"
GoTo :Eof

Iska
02-12-2017, 10:14
Что то можно поделать? »
Убрать «enabledelayedexpansion», делать двойное раскрытие переменных окружения внутри скобок по «call». Готовый пример — в предыдущем сообщении.

alpap
02-12-2017, 14:23
на мой взгляд второй раз писать call лишнее, можно одним обойтись:

@echo off
set "SourceFolder=E:\20171130"

pushd "%SourceFolder%"
for %%a in (*) do set "name=%%~na"& call :_rn "%%a" "%%name:~-12,11%%%%~xa"
popd
pause& exit

:_rn
ren "%~1" "%~2"
exit /b

Iska
02-12-2017, 14:38
на мой взгляд второй раз писать call лишнее, можно одним обойтись: »
А я недоглядел даже :).

Patroklos
02-12-2017, 15:08
Всем огромное спасибо! Я пока проверил способ от megaloman и он работает отлично. Способ от alpap проверю позже но очевидно что он тоже работает :)
Вы крутые!




© OSzone.net 2001-2012