CMD/BAT - имя "входящего" файла без расширения

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

Re: CMD/BAT - имя "входящего" файла без расширения

Сообщение SharkyEXE »

Цитата DonQuixote, не понимаю Ваш код:



ren "%orgFILE%" "%Rnam%GUImap_%%a"



Как я понимаю, некий файл с именем "%orgFILE%"в цикле переименовывается в "%Rnam%GUI_3_S_%%a" Очевидно, такое переименование возможно 1 раз (я пока не смотрю на остальной синтаксис), так как после первого раза файл уже не называется "%orgFILE%"

Лучше не приводите код, а объясните задачу:

У Вас есть группа файлов. Маску можете указать?

Каждый из этих файлов надо переименовать.

Впереди имени файла и сзади имени файла (перед расширением) что-то надо добавить. Что?


Пишу наугад, так как не очень понимаю постановку задачи

[spoiler]Код:
[/spoiler]

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

@Echo Off
Set "BINDIR=Z:\Tra La La"
Set "Mask=ForgeAmidst-*.jar"
Set "Pref=1_"
Set "Suff=-FAXV"
FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%\%Mask%" 2^>nul`) DO Ren "%BINDIR%\%%f" "%Pref%%%~nf%Suff%%%~xf"

В папке %BINDIR% есть файл %%f (например, ForgeAmidst-1.1.1.jar), который переименовываем:

Перед именем добавляем префикс %Pref% (Здесь 1_)

Выделяем из имени файла только имя без расширения %%~nf (например, ForgeAmidst-1.1.1)

После него прибавляем суффикс %Suff% (здесь -FAXV)

После суффикса выделяем из исходного имени файла расширение %%~xf (например, .jar)

Как результат получаем переименованный файл 1_ForgeAmidst-1.1.1-FAXV.jar

Откуда у Вас берётся еще GUImap_ не понимаю.
Аватара пользователя
SharkyEXE

Re: CMD/BAT - имя "входящего" файла без расширения

Сообщение SharkyEXE »

Добрый лень

я переименовываю группы файлов таким макаром



Код:

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

set LIN1=for /f "tokens=*" %%a in ('dir /b "%BINDIR%
set LIN2= do ren "%orgFILE%" 
%LIN1%ForgeAmidst-*.jar"')%LIN2%"%Rnam%GUImap_%%a"

то есть сам код вот...выше я просто его укоротил))



Код:

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

set Rnam=1_
for /f "tokens=*" %%a in ('dir /b "%BINDIR%ForgeAmidst-*.jar"') do ren "%orgFILE%" "%Rnam%GUImap_%%a"
....
...
....
for /f "tokens=*" %%a in ('dir /b "%BINDIR%FullThrottleNEI-*.jar"') do ren "%orgFILE%" "%Rnam%GUI_3_S_%%a"

для каждого файла пишу свою строчку...

мне нужно теперь после имени файла каждого добавлять -FAXV

что бы на выходе получился из ForgeAmidst-1.1.1.jar в 1_GUImap_ForgeAmidst-1.1.1-FAXV.jar

сечас получаеться 1_GUImap_ForgeAmidst-1.1.1.jar-FAXV что сами видите не гуд



нашёл удобный способ для себя в 1 строчку...именно 1 строчку надо



Код:

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

For %%i In ("%BINDIR%BetterAchievements-*.jar") Do (Set FILENAME=%%~ni&ren "%%i" "%Rnam%GUI_%FILENAME%-FA0V%poi1%")

но переменная FILENAME не работает в команде ren
Аватара пользователя
DonQuixote

Re: CMD/BAT - имя "входящего" файла без расширения

Сообщение DonQuixote »

orgFILE обычная переменная..строка была длинная я укоротил)



Код:

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

for /f "tokens=*" %%a in ('dir /b "%BINDIR%FullThrottleNEI-*.jar"') do ren "%BINDIR%%%a" "%Rnam%GUI_3_S_%%a"

вот по сути оригинла

я пока сдела так как выше



Код:

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

set poi1=.jar
For %%i In ("%BINDIR%Schematica-*%poi1%") Do Set FILENAME=%%~ni
ren "%BINDIR%%FILENAME%%poi1%" "%Rnam%INFO3_ADMIN_WD_%FILENAME%-FAxV%poi1%"

по сути работа устравиает.ищет все файлы,переименовывает и начала файла и конец.

но мне надо бы в 1 строчку все это дело...



маска файла всегда разная...я просто создаю новую строчку с нужным именем

вот пример файлов.

FullThrottleNEI-*.jar бывают и зип Schematica-*.zip имя тоже разное



щас у меня 1800 строк в коде.... разделить на попалам.(из за найденого способа на пред. странице)



"Каждый из этих файлов надо переименовать."

не все..тока те что подходят под маску,которую я указываю сам.



"Впереди имени файла и сзади имени файла (перед расширением) что-то надо добавить. Что?"

тут нет чего то одного..всегда разное



Код:

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

ren "%BINDIR%%FILENAME%%poi1%" "%Rnam%INFO3_ADMIN_WD_%FILENAME%-FAxV%poi1%"

[/code]

тут скажем в начале переменная %Rnam%+INFO3_ADMIN_WD_ имя файла -FAxV расширение.

конец и начал могут быть разные.. это я тоже сам указываю.



ваш код вроде подходит..проверю потом спасибо)

"Откуда у Вас берётся еще GUImap_ не понимаю."

я его сам сую в код...

в итоге после переделки код будет такой:



Код:

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

Set "BINDIR=Z:\Tra La La"
Set "Rnam=1_"
FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%\ForgeAmidst-*.jar" 2^>nul`) DO Ren "%BINDIR%\%%f" "%Rnam%INFO3_ADMIN_WD_%%~nf-FAXV%%~xf"

я думаю то что надо и вроде будет работать)) все такие код в 2 строки мне не удобен



код пашет))

а можно ли добавить в эту же строку(без второй) команду что то типа echo %%f что бы выводило в консоль имя файла или полный путь...

скажем выводила те файлы которые переименованы уже конечным именем и те файлы которые не были найден?
Аватара пользователя
Iska

Re: CMD/BAT - имя "входящего" файла без расширения

Сообщение Iska »

DonQuixote, если Вы внутри цикла for каким-либо образом меняете имена найденных из набора файлов таким образом, что новое имя тоже подпадает под указанный в for набор файлов — то могут быть проблемы: какие-то файлы могут остаться необработанными, какие-то — могут быть обработаны многократно. Чтобы избежать этого, вместо цикла for используется цикл разбора по for /f с выводом стандартного потока команды dir.



P.S. Для цитирования используйте тэг «quote».
Аватара пользователя
megaloman

Re: CMD/BAT - имя "входящего" файла без расширения

Сообщение megaloman »

Iska, я с CMD не очень..просто собираю то тут то там кусочки...так что не понял о чём вы.точнее как реализовать.

знаю что



Код:

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

FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%\ForgeAmidst-*.jar" 2^>nul`) DO Ren "%BINDIR%\%%f" "%Rnam%INFO3_ADMIN_WD_%%~nf-FAXV%%~xf"

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




Цитата megaloman:



который потом можно смотреть текстовым редактором.
CMD/BAT - имя "входящего" файла без расширения





Цитата megaloman:



Для 1800 строк сомневаюсь,
CMD/BAT - имя "входящего" файла без расширения




я просто путём поиска и замены заменил весь код на предложенный вами.

просто если есть возможность выводить в косоль имена файлов как я выше описал,добавив что то дополнительное к команде то хорошо..

я просбовал так



Код:

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

FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%\ForgeAmidst-*.jar" 2^>nul`) DO Ren "%BINDIR%\%%f" "%Rnam%INFO3_ADMIN_WD_%%~nf-FAXV%%~xf" $ echo %%f

но echo не срабатывает

с виду код ваш не подойдёт..

для примера покажу кусочек полного кода своего.



Код:

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

@echo off
SET BINDIR=%~dp0
CD /D "%BINDIR%"
set poi1=jar*
set poi2=zip*
set poi3=litemod*
set orgFILE=%BINDIR%%%a
goto start
:start
Set "Suff=-FAxV"
FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%ForgeAmidst-*.jar" 2^>nul`) DO Ren "%BINDIR%%%f" "%Rnam%GUImap_%%~nf%Suff%%%~xf"
FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%VoidMonster 1*.jar" 2^>nul`) DO Ren "%BINDIR%%%f" "%Rnam%MOB_RM_%%~nf%Suff%%%~xf"
FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%CondensedOres 1*.jar" 2^>nul`) DO Ren "%BINDIR%%%f" "%Rnam%RM_%%~nf%Suff%%%~xf"
FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%MeteorCraft 1*.jar" 2^>nul`) DO Ren "%BINDIR%%%f" "%Rnam%RM_%%~nf%Suff%%%~xf"
set Rnam=_IMI_
FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%dimensional-anchor-59*.jar" 2^>nul`) DO Ren "%BINDIR%%%f" "0CH_0%Rnam%%%~nf%Suff%%%~xf"
FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%immibis-core-59*.jar" 2^>nul`) DO Ren "%BINDIR%%%f" "LIB%Rnam%%%~nf%Suff%%%~xf"
FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%adv-repulsion-systems-59*.jar" 2^>nul`) DO Ren "%BINDIR%%%f" "2_1%Rnam%%%~nf%Suff%%%~xf"
FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%advanced-machines-59*.jar" 2^>nul`) DO Ren "%BINDIR%%%f" "2_1%Rnam%%%~nf%Suff%%%~xf"
FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%tubestuff-59*.jar" 2^>nul`) DO Ren "%BINDIR%%%f" "0%Rnam%%%~nf%Suff%%%~xf"
FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%autofood-59*.jar" 2^>nul`) DO Ren "%BINDIR%%%f" "4%Rnam%%%~nf%Suff%%%~xf"

и таких строчек штук 1000 и все они разные, с разными именами

то есть желательно, да и удобнее было что в тут же строку написать, но с $ (нашёл в инете) не получается.



если интересно

вкраце, бат файл мне нужен для того что бы переименовать новые версии файлов, пример: "ForgeAmidst-1.jar ForgeAmidst-2.jar ForgeAmidst-04.jar ForgeAmidst-06.jar" присваивая им в начале имени что то конкретное для данного файла и в конце, так как делать это руками было очень напряжно.

батник выше справляется)спс megaloman

я таким образом группировал их.
Аватара пользователя
DonQuixote

Re: CMD/BAT - имя "входящего" файла без расширения

Сообщение DonQuixote »

Цитата DonQuixote:



с виду код ваш не подойдёт..



А кто Вас в этом убедил?


Вот Ваш пример с помощью контекстной замены

[spoiler]Код:
[/spoiler]

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

@echo off
Pushd "%~dp0"
Set "LogFile=%Tmp%\%~n0.log"
Del "%LogFile%" 2>nul
Call :FRen "ForgeAmidst-*.jar"    "GUImap_" "-FAxV"
Call :FRen "VoidMonster 1*.jar"   "MOB_RM_" "-FAxV"
Call :FRen "CondensedOres 1*.jar" "RM_"     "-FAxV"
Call :FRen "MeteorCraft 1*.jar"   "RM_"     "-FAxV"
Call :FRen "dimensional-anchor-59*.jar"    "0CH_0_IMI_" "-FAxV"
Call :FRen "immibis-core-59*.jar"          "LIB_IMI_"   "-FAxV"
Call :FRen "adv-repulsion-systems-59*.jar" "2_1_IMI_"   "-FAxV"
Call :FRen "advanced-machines-59*.jar"     "2_1_IMI_"   "-FAxV"
Call :FRen "tubestuff-59*.jar"             "0_IMI_"     "-FAxV"
Call :FRen "autofood-59*.jar"              "4_IMI_"     "-FAxV"
Popd 
Notepad "%LogFile%"
GoTo :Eof
:FRen
	If Exist %1 (
		FOR /F "usebackq delims=" %%f IN (`dir /b %1 2^>nul`) DO (
			Move /Y "%~dp1%%f" "%~dp1%~2%%~nf%~3%%~xf" >nul
			If Exist "%~dp1%~2%%~nf%~3%%~xf" (
				Echo +++ "%~dp1%%f" ----^> "%~2%%~nf%~3%%~xf" >>"%LogFile%"
			) Else (
				Echo ??? not renamed "%~dp1%%f" ----^> "%~2%%~nf%~3%%~xf" >>"%LogFile%"
			)
		)
	) Else (
		Echo --- %1 not found >>"%LogFile%"
	)
GoTo :Eof
Аватара пользователя
megaloman

Re: CMD/BAT - имя "входящего" файла без расширения

Сообщение megaloman »

Цитата megaloman:

А кто Вас в этом убедил?
CMD/BAT - имя "входящего" файла без расширения


ну я не спец)

то есть мне в строчки



Код:

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

Call :FRen "dimensional-anchor-59*.jar"    "0CH_0_IMI_" "-FAxV"
Call :FRen "immibis-core-59*.jar"          "LIB_IMI_"   "-FAxV"
Call :FRen "adv-repulsion-systems-59*

нужно просто вставить свои имена с из 1000 строк? и будет тоже самое что и



Код:

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

FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%immibis-core-59*.jar" 2^>nul`) DO Ren "%BINDIR%%%f" "LIB%Rnam%%%~nf%Suff%%%~xf"

тока ещё и с логом?

если так то надо будет проверить)

а там нет ошибки в строках GoTo :Eof ? не вижу этой :Eof



с виду просто идеально!!!благодарю всех за помощью..щас буду делать поиск и замену по своему батнику..
Аватара пользователя
DonQuixote

Re: CMD/BAT - имя "входящего" файла без расширения

Сообщение DonQuixote »

Цитата DonQuixote:



знаю что



Код:

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

FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%\ForgeAmidst-*.jar" 2^>nul`) DO Ren "%BINDIR%\%%f" "%Rnam%INFO3_ADMIN_WD_%%~nf-FAXV%%~xf"

для меня работает сечас замечательно
CMD/BAT - имя "входящего" файла без расширения




Да, я про этот принцип и писал.




Цитата DonQuixote:



но хотелось бы в той же строке команды, добавить что то, что позволило бы выводить те файлы которые переименованы уже с конечным именем … не создавая дополнителную команду в новой строке
CMD/BAT - имя "входящего" файла без расширения




Чем Вас не устраивает отдельная строка? Так же куда нагляднее. Впрочем, если очень хотите, можно обойтись и одной (работоспособность не проверялась, демонстрируется только принцип):



Код:

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

FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%\ForgeAmidst-*.jar" 2^>nul`) DO (Ren "%BINDIR%\%%f" "%Rnam%INFO3_ADMIN_WD_%%~nf-FAXV%%~xf" & echo "%Rnam%INFO3_ADMIN_WD_%%~nf-FAXV%%~xf")


Цитата DonQuixote:



и те файлы которые не были найден в консоль..
CMD/BAT - имя "входящего" файла без расширения




Это какие?
Аватара пользователя
Iska

Re: CMD/BAT - имя "входящего" файла без расширения

Сообщение Iska »

DonQuixote, нужно просто вставить свои имена в вызов Call из 1000 строк и будет тоже самое что и с For тока ещё и с логом. Eof - end of file, эту метку писать не надо, так что ошибки нет. Необходимо, чтобы после окончания главной части командного файла не выполнялась процедура. Из командного окна запускаем GoTo /? и читаем хелп.
Аватара пользователя
megaloman

Re: CMD/BAT - имя "входящего" файла без расширения

Сообщение megaloman »

Цитата Iska:

Чем Вас не устраивает отдельная строка?
CMD/BAT - имя "входящего" файла без расширения


так как файлов много..и самих строк естесвенно....в две строки не удобно..что менять или исправлять...вот как выше я щас будут менять



Код:

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

FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%dimensional-anchor-59*.jar" 2^>nul`) DO Ren "%BINDIR%%%f" "0CH_0%Rnam%%%~nf%Suff%%%~xf"

эту строчку на эту



Код:

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

Call :FRen "dimensional-anchor-59*.jar"         "0CH_0%Rnam%"    "-FAxV"

придётся по возится...так как плохо знаю регулярные выражения

Цитата Iska:

Это какие?
CMD/BAT - имя "входящего" файла без расширения


как по примеру от megaloman, его батник это делает через txt



Код:

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

+++ "G:\MinecraftSBORKA\1_sborak\434\dimensional-anchor-59.0.3.jar" ----> "0CH_0_IMI_dimensional-anchor-59.0.3-FAxV.jar" 
--- "immibis-core-59*.jar" not found

всем спасибо всех с наступающим)))
Ответить

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