![]() |
имя "входящего" файла без расширения
подскажите, может ли командная строка какой-либо переменной возвращать только ИМЯ "входящего" файла (мышкой закинутый в "Открыть с помощью" данного батника) без расширения? поясню, например, мне нужно переименовать расширение файла, а не добавить поверх существующего новое таким кодом:
Код:
MOVE %1 %1.AVI |
Цитата:
Код:
REN "%~1" "%~n1.AVI" |
благодарю! работает)) а где можно почитать на тему подобных переменных?
|
Цитата:
Код:
FOR /? |
Напишите, пожалуйста, возможно ли реализовать нижеследующее? Если да, то, прошу помочь.
1) Есть файл D:\DP_MassStorage_wnt5_x86-32_101002.7z; 2) Нужно при помощи *.cmd файла определить имя файла D:\DP_MassStorage_wnt5_x86-32_101002.7z, т. е. DP_MassStorage_wnt5_x86-32_101002 и записать это имя, т. е. DP_MassStorage_wnt5_x86-32_101002 в переменную *.cmd файла, чтобы затем эту переменную, постоянно меняющуюся в зависимости от имени файла, использовать при создании архива. Что-то вроде такого должно получиться:где текст после знака равно (в моём примере: DP_MassStorage_wnt5_x86-32_101002) в строкедолжен определяться автоматически, в зависимости от имени файла D:\DP_MassStorage_wnt5_x86-32_101002.7z, а не вписываться вручную, как у меня. Спасибо. |
Код:
For %%i In ("D:\DP_MassStorage_wnt5_x86-32_101002.7z") Do Set NAZVANIYE_BEZ_.7z=%%~ni Код:
@ECHO OFF |
Пожалуйста, поправьте этот код, чтобы работало. А работать должно:
1) определение имени файла без расширения и запись в переменную 2) соответственно, после рабочего пункта 1) должен работать весь кодСпасибо. |
SharkyEXE, так?
Код:
@Echo Off |
Цитата:
|
Добрый лень
я переименовываю группы файлов таким макаром Код:
set LIN1=for /f "tokens=*" %%a in ('dir /b "%BINDIR% Код:
set Rnam=1_ мне нужно теперь после имени файла каждого добавлять -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%") |
Цитата:
Лучше не приводите код, а объясните задачу: У Вас есть группа файлов. Маску можете указать? Каждый из этих файлов надо переименовать. Впереди имени файла и сзади имени файла (перед расширением) что-то надо добавить. Что? Пишу наугад, так как не очень понимаю постановку задачи
Код:
@Echo Off Перед именем добавляем префикс %Pref% (Здесь 1_) Выделяем из имени файла только имя без расширения %%~nf (например, ForgeAmidst-1.1.1) После него прибавляем суффикс %Suff% (здесь -FAXV) После суффикса выделяем из исходного имени файла расширение %%~xf (например, .jar) Как результат получаем переименованный файл 1_ForgeAmidst-1.1.1-FAXV.jar Откуда у Вас берётся еще GUImap_ не понимаю. |
orgFILE обычная переменная..строка была длинная я укоротил)
Код:
for /f "tokens=*" %%a in ('dir /b "%BINDIR%FullThrottleNEI-*.jar"') do ren "%BINDIR%%%a" "%Rnam%GUI_3_S_%%a" я пока сдела так как выше Код:
set poi1=.jar но мне надо бы в 1 строчку все это дело... маска файла всегда разная...я просто создаю новую строчку с нужным именем вот пример файлов. FullThrottleNEI-*.jar бывают и зип Schematica-*.zip имя тоже разное щас у меня 1800 строк в коде.... разделить на попалам.(из за найденого способа на пред. странице) "Каждый из этих файлов надо переименовать." не все..тока те что подходят под маску,которую я указываю сам. "Впереди имени файла и сзади имени файла (перед расширением) что-то надо добавить. Что?" тут нет чего то одного..всегда разное Код:
ren "%BINDIR%%FILENAME%%poi1%" "%Rnam%INFO3_ADMIN_WD_%FILENAME%-FAxV%poi1%" тут скажем в начале переменная %Rnam%+INFO3_ADMIN_WD_ имя файла -FAxV расширение. конец и начал могут быть разные.. это я тоже сам указываю. ваш код вроде подходит..проверю потом спасибо) "Откуда у Вас берётся еще GUImap_ не понимаю." я его сам сую в код... в итоге после переделки код будет такой: Код:
Set "BINDIR=Z:\Tra La La" код пашет)) а можно ли добавить в эту же строку(без второй) команду что то типа echo %%f что бы выводило в консоль имя файла или полный путь... скажем выводила те файлы которые переименованы уже конечным именем и те файлы которые не были найден? |
DonQuixote, если Вы внутри цикла for каким-либо образом меняете имена найденных из набора файлов таким образом, что новое имя тоже подпадает под указанный в for набор файлов — то могут быть проблемы: какие-то файлы могут остаться необработанными, какие-то — могут быть обработаны многократно. Чтобы избежать этого, вместо цикла for используется цикл разбора по for /f с выводом стандартного потока команды dir.
P.S. Для цитирования используйте тэг «quote». |
Цитата:
Вот вариант
Код:
@Echo Off |
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" Цитата:
Цитата:
просто если есть возможность выводить в косоль имена файлов как я выше описал,добавив что то дополнительное к команде то хорошо.. я просбовал так Код:
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 off то есть желательно, да и удобнее было что в тут же строку написать, но с $ (нашёл в инете) не получается. если интересно вкраце, бат файл мне нужен для того что бы переименовать новые версии файлов, пример: "ForgeAmidst-1.jar ForgeAmidst-2.jar ForgeAmidst-04.jar ForgeAmidst-06.jar" присваивая им в начале имени что то конкретное для данного файла и в конце, так как делать это руками было очень напряжно. батник выше справляется)спс megaloman я таким образом группировал их. |
Цитата:
Вот Ваш пример с помощью контекстной замены
Код:
@echo off |
Цитата megaloman:
А кто Вас в этом убедил? » ну я не спец) то есть мне в строчки Код:
Call :FRen "dimensional-anchor-59*.jar" "0CH_0_IMI_" "-FAxV" Код:
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 с виду просто идеально!!!благодарю всех за помощью..щас буду делать поиск и замену по своему батнику.. |
Цитата:
Цитата:
Код:
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, нужно просто вставить свои имена в вызов Call из 1000 строк и будет тоже самое что и с For тока ещё и с логом. Eof - end of file, эту метку писать не надо, так что ошибки нет. Необходимо, чтобы после окончания главной части командного файла не выполнялась процедура. Из командного окна запускаем GoTo /? и читаем хелп.
|
Цитата Iska:
Чем Вас не устраивает отдельная строка? » так как файлов много..и самих строк естесвенно....в две строки не удобно..что менять или исправлять...вот как выше я щас будут менять Код:
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: Это какие? » как по примеру от megaloman, его батник это делает через txt Код:
+++ "G:\MinecraftSBORKA\1_sborak\434\dimensional-anchor-59.0.3.jar" ----> "0CH_0_IMI_dimensional-anchor-59.0.3-FAxV.jar" |
не знаю куда и как описать в поиске то что мне надо, по этому напишу сюда. если что поправте.. в другую ветку перенесу
вообщем есть бат файл который перехватывает параметры запуска другой программы и подменяет часть строки: Код:
set HOMEDIRnew=%APPDATA%%HOMEDIRR% переменная %HOMEDIRold% не находится,точнее не меняется. если написать так: Код:
set sSTRING=%sSTRING: -dir o:\1_TEST\0_FA6V\=-dir !HOMEDIRnew!% если путь указан через переменную то нет. я как понимаю он не может поймать переменную? как это поравить? |
DonQuixote,
никаких особых проблем в вашем ребусе нет: Код:
@echo on P.S. И кстати что это: Код:
set sSTRING=%* |
alpap, я не могу полный путь задать.. иначе бы не срашивал, мне именно нужна переменная,так как она меняется
я так Код:
set sSTRING=!sSTRING:-dir %HOMEDIRold%=-dir %HOMEDIRnew%! set sSTRING=%* это он присваивает этой переменной параметры запуска программы через которую был запущен и потом по коду заменяет на свои(например %HOMEDIRold% на %HOMEDIRnew%) то есть set sSTRING=%* она работает и заменяет то что надо, если не указывать в поиске на замену переменную.а делать так set sSTRING=%sSTRING: -dir o:\1_TEST\0_FA6V\=-dir !HOMEDIRnew!% то есть там длиная строка..причём разная бывает. но проверю..может просто в коде ошибка.. вот кину пример полный: Код:
@Echo on а вот --gameDir "o:\1_TEST\1client\.gam" на --gameDir "o:\1_TEST\1client\gamSV" не хочет так там переменная %HOMEDIRRMMM2% |
Цитата:
|
Iska,
да я имелл ввиду что ведь так нужно: Код:
set "sSTRING=%*" |
DonQuixote,
я выше показал как правильно а вы опять по-своему делаете используйте в set правильный синтаксис: Код:
set "имя переменной=значение" Код:
set "имя переменной="значение"" Код:
Setlocal EnableDelayedExpansion Код:
set "b=c%d%" но опять же указал выше, используйте сразу вначале полный путь в переменной, зачем разбивать его на куски, кусок должен быть только один с неизвестной частью пути, которая и должна быть переменной. |
Цитата alpap:
%* - это ведь несколько параметров, а в кавычках ли они? » там по сути 1 длинная строка как на примере и переменныйх там тоже нет. Iska, alpap, для примера что присваивается переменной sSTRING=%* я выше написал set sSTRING=-Xmx3900m.........и т д то есть там бат рабочий кроме самой моей проблемы с переменной не выходит по примерам вашим батник выше который под коректировать. скобки я тоже ставил ..толку ноль. эта строка:set sSTRING=%sSTRING:--gameDir %HOMEDIRRMMM2%=--gameDir !HOMEDIRRMMM!% не работает вы если что извините я не спец..любитель я не знаю в чём косяк и как починил но заменил этой строчкой не рабочую Код:
set "b=%HOMEDIRRMMM2%" |
Время: 09:19. |
Время: 09:19.
© OSzone.net 2001-