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

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

ВиталийВ 01-04-2015 15:12 2490440

удалить первые 7 символов в имени файла
 
Вообще не могу сообразить.
надо:
в папке C:\ftp\rpo
во всех именах файлов удалить первые 7 символов.

Помогите? ФОрум глядел сообразить не могу, префикс дописывать научился, сейчас его убрать надо, а не получается.

Georgio 01-04-2015 16:53 2490489

Код:

@echo off

setlocal

set "folder=C:\ftp\rpo"
set "number=7"

pushd "%folder%"
for /f "delims=" %%i in ('2^>nul dir/a-d/b') do (
 set name=%%~ni
 2>nul cmd/v/c ren "%%i" "!name:~%number%!%%~xi"
)
popd

endlocal


ВиталийВ 02-04-2015 11:45 2490801

Супер!!!!!!!!
Именно так, как хотелось!

ВиталийВ 02-04-2015 14:38 2490917

а если все это нужно сделать почти так же,
НО
удалить первые символы в имени файла ДО "разделителя"

пример

614000-ks3218955.zip -> ks3218955.zip

Iska 02-04-2015 15:39 2490967

Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=C:\ftp\rpo

2>nul pushd "%sSourceFolder%" && (
        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 [%sSourceFolder%]
        exit /b 1
)

endlocal
exit /b 0


ВиталийВ 02-04-2015 17:31 2491018

А в этом варианте скрипта разделитель "-" тоже удалится? Его бы тоже ненадо оставлять.

Iska 02-04-2015 18:18 2491031

ВиталийВ, а он остаётся?

Гуллипут 02-04-2015 21:52 2491134

Iska, как всё-таки полезно общаться с мастерами ! Сколько раз использовал set с подстановкой, но как-то не зафиксировалось в голове, что можно в качестве str1 указать шаблон, начинающийся со звёздочки ! Очень полезный нюанс, при случае воспользуюсь.

Iska 03-04-2015 01:39 2491205

Цитата:

Цитата Гуллипут
Сколько раз использовал set с подстановкой, но как-то не зафиксировалось в голове, что можно в качестве str1 указать шаблон, начинающийся со звёздочки ! »

Я почерпнул это у коллеги gora вот здесь.

Опиум 03-04-2015 11:50 2491337

еще с ftp такая проблема бывает, как русские имена файлов с пробелами. Девочки выкладывают документики в папку, которая "расшарена по ftp" для клиентов.
Ничего более умного не нашел, как написать утилиту, которая просматривает папку и ренеймит документы, с нехорошими именами.
Но может быть есть более красивое решение скриптом?

eerrrtt32 30-07-2024 12:00 3029451

Всем доброго дня!
Немного переработал скрипт под себя:

Код:

@echo off
:: Добавил строку кодаровки, чтобы работало с русскими именами и путями
chcp 1251

setlocal enableextensions enabledelayedexpansion

:: Убрал строку
:: set sSourceFolder=C:\ftp\rpo
:: Изменил строку
:: 2>nul pushd "%sSourceFolder%" && (
2>nul pushd && (
:: чтобы работало в конкретной папке

        for /f "usebackq delims=" %%i in (
                `2^>nul dir /b /a:-d`
        ) do (
                set sVar=%%~i
:: Удалить все до символа "_"
                ren "%%~i" "!sVar:*_=!"
        )
        popd
) || (

        exit /b 1
)

endlocal
exit /b 0

Возник вопрос:
- Как сделать так, чтобы когда обнаруживаются одинаковые имена, скрипт автоматом добавлял в конец имени скажем "(2)" т.е. если файл 123.db уже есть, то следующий будет назван 123(2).db, 123(3).db и т.д. по счетчику? А не просто пропущен

megaloman 31-07-2024 23:28 3029514

Код:

@Echo Off &Cls
>nul Chcp 1251

        Set "BoxIn=Z:\Box_In"
rem        Set "BoxIn=%~dp0"

        Pushd "%BoxIn%"||(Echo Folder "%BoxIn%\" not found &Pause &Exit /B 2)
                For /F "usebackq tokens=1* delims=_" %%f In (`2^>nul Dir /B /A:-D /O:D *_*.*`) Do Call :MyRen "%%f" "%%g"
        Popd
Pause
Exit /B

:MyRen
        Set /A i=1
        Set "Suff="
        :Begin
                If Not Exist "%~n2%Suff%%~x2" (Ren "%~1_%~2" "%~n2%Suff%%~x2" &Exit /B)
                Set /A i+=1
                Set "Suff=(%i%)"
                GoTo :Begin
Exit /B


eerrrtt32 01-08-2024 17:03 3029528

megaloman,
Код:

Системе не удается найти указанный диск.
Folder "Z:\Box_In\" not found
Для продолжения нажмите любую клавишу . . .

И конец истории. При этом в рабочей папке ничего не происходит

megaloman 01-08-2024 22:22 3029534

eerrrtt32, Вы вроде бы беретесь перерабатывать скрипты под себя, то есть должны понимать смысл написанного.
Итак, в переменной BoxIn содержится путь к Вашей папке. Батник при этом может быть где Вам удобно. Естественно, моя папка с тестовыми файлами к Вам не имеет никакого отношения. И аварийное сообщение Вам на это прямо указывает. Укажите свою.
Как альтернатива (закомментированная строка ) если батник и файлы в одной папке. Если нужно так - уберите rem
Не считаю хорошей идеей размещать батник и обрабатываемые файлы вместе

eerrrtt32 02-08-2024 01:29 3029538

megaloman, больше спасибо! разобрался


Время: 09:51.

Время: 09:51.
© OSzone.net 2001-