Войти

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


semiono
13-01-2023, 01:58
%ProgramFiles%\Au3Info\Aut2Exe.exe /in "%1" /icon %WinDir%\exec.ico /nopack /ansi /x64 /gui /companyname "Microsoft" /filedescription "%1" /fileversion "1.0.0.0" /legalcopyright "All Rights" /productname "%1" /productversion "1.0.0.0"


А нельзя простым способом заменить расширение файла в двух %1, втором и третьем. Чтобы первый вызов был обычным test.au3, а далее test.exe и test.exe?

Serguei Kouzmine
13-01-2023, 02:38
попробуйте выразиться яснее

megaloman
13-01-2023, 08:22
Если %1 это test.au3
то %~n1.exe это test.exe

YuS_2
13-01-2023, 10:02
Если %1 это test.au3
то %~n1.exe это test.exe »
А... хмм... я конечно, cmd использую редко, но параметры запуска пакетных файлов ещё не совсем из памяти стерлись... это чтобы опять не было обвинений в обзываниях :)
%1 - это первый параметр либо самого батника, либо call
%~n1 - то же самое, но из параметра выделяется имя файла по последней точке в полном имени (если, конечно, расширение у него есть)
Как-то так:
167843

То бишь, тут изначально непонятна суть задачи, а твой пример, просто может человека окончательно запутать и что куда добавлять ему, станет вообще темным лесом... :)
В общем, расшифровал что откуда берется для ТС

Serguei Kouzmine
13-01-2023, 18:48
для того чтобы работали ~x, ~n и т.д. нужно чтоб был вызов батника

call :TEST a.txt

goto :EOF

:TEST
echo %~n1
goto :EOF


то есть надо писать батник - в командной строке не сработает по моему

semiono
13-01-2023, 20:33
%~n1.exe »
Удивительно, но это работает.
:)

%~n1 - то же самое, но из параметра выделяется имя файла по последней точке в полном имени (если, конечно, расширение у него есть) »
Это самое трудное в cmd/bat, визуально ничего не напоминает, хотя регэкспы ещё труднее))
Но на этот раз кажется понял.

А вот на Fasm


include '%fasm%/win64ax.inc'
section '.code' executable
start:
sub rsp,8

invoke SHGetSpecialFolderPath,NULL,a,CSIDL_PROGRAM_FILES,NULL
invoke PathAddBackslash,a
invoke lstrcat,a,'Au3Info'
invoke PathAddBackslash,a
invoke lstrcat,a,'Aut2exe.exe'

invoke GetBinaryType,a,z
cmp eax,NULL
jz exit

invoke SHGetSpecialFolderPath,NULL,b,CSIDL_WINDOWS,NULL
invoke PathAddBackslash,b
invoke lstrcat,b,'exec.ico'

invoke GetCommandLine
mov ebx,eax
@@:
cmp byte [ebx],NULL
je sh
cmp byte [ebx],' '
je @f
inc ebx
jmp @r
@@:
inc ebx
cmp byte [ebx],' '
je @r

mov [i],ebx
invoke lstrcat,c,[i]
invoke PathRemoveExtension,[i]
invoke PathAddExtension,[i],'.exe'

invoke wsprintf,f,'/in %s /icon %s /nopack /ansi /x64 /gui /companyname "New" /filedescription "%s" /fileversion "1.0.0.0" /legalcopyright "(c)" /productname "%s" /productversion "1.0.0.0"',c,b,[i],[i]
sh:
invoke ShellExecute,NULL,NULL,a,f,NULL,SW_NORMAL
exit:
invoke ExitProcess,NULL

section '.data' readable writable

a rb MAX_PATH
b rb MAX_PATH
c rb MAX_PATH
f rb MAX_PATH
i dd MAX_PATH
z dd NULL

section '.idata' import readable

library kernel32,'KERNEL32.DLL',shell32,'SHELL32.DLL',shlwapi,'SHLWAPI.DLL',user32,'USER32.DLL'
include '%fasm%/api/kernel32.inc'
include '%fasm%/api/shell32.inc'
include '%fasm%/api/shlwapi.inc'
include '%fasm%/api/user32.inc'

YuS_2
14-01-2023, 15:15
хотя регэкспы ещё труднее »
Всё относительно...
Скажем так: для русского "китайская грамота" - темный лес... а для китайца или для того, кто её изучил? Они ведь и пишут, и разговаривают по-китайски! :)
Так и тут, всё кажется очень сложным, пока не изучено... а вот после изучения, уже не будет казаться "китайской грамотой"... :)




© OSzone.net 2001-2012