Program uruchamiający plik bat o tej samej nazwie

0

Siemaneczko,
Nie nadaje się ten post do działu praca, czy inne, więc wrzucam tu.
C++ polizałem 2 lata temu ale mi nie posmakował, więc go zostawiłem, wywołuje u mnie głównie frustracje i na razie zarabiam z klepania w pehapie (nie śmiać się ;P)

Potrzebuję programiku (źródło, nie exe), który przeczyta swoją nazwę i uruchomi plik *.bat o swojej nazwie bez ".exe" .. czyli jak nazwę pliczek "a.exe" to po jego uruchomieniu on odpali "a.bat", a jak zmienie mu nazwe na "b.exe" to odpali "b.bat".

Za dobrą robotę stawiam (wirtualnie - przelewik lub paypal) piwo (nie wiem w sumie ile piwo kosztuje, bo nie pijam %) - tak, żeby nie było, że wpadł i chce rozwiązania.

Miałem taki programik, ba, nawet wiem gdzie jest, ale został na płytce 40km ode mnie, stąd ta prośba -.-

No i póki co mam tyle, stanąłem na podzieleniu stringa wg znaczka "" ;P odrzucenie 4 ostatnich znakow + dopisanie .exe pewnie nie było by już problemem

#include <iostream>
#include <stdlib.h>
using namespace std;

int main(int argc, char** argv)
{
    //cout<<"Hellow"<<endl;
    cout<<argv[0]<<endl;
    //system("pause");
    return 0;
}
1
#include <cstring>
#include <windows.h>

int main(int argc, char** argv)
{
  char* p = argv[0]+strlen(argv[0]);
  while (*p!='.') --p; p++;
  strcpy(p,"bat");
  while (*p!='\\') --p; p++;
  int dl = (int)(p-argv[0]);
  char* dir = new char[dl+1];
  memcpy(dir,argv[0],dl); dir[dl]=0;
  ShellExecute(0,"open",argv[0],"",dir,SW_SHOW);
  delete [] dir;

  return 0;
}

EDIT: działa tylko na windowsie, z założeniem, że plik uruchamiany ma rozszerzenie 3 znakowe i że w ścieżce wystąpi znak '' - w zasadzie jak masz windows to reszta powinna być zawsze spełniona

1
string s = argv[0];
s.erase(s.length()-3,3);
s = s + "bat";
WinExec(s.c_str(), SW_SHOW)
0

dzięki @krwq, bangla aż miło, napisz na pmkę z info jak podrzucić Ci wirtualne piwko ;)

również dzięki @ujemny, nie sprawdzam, bo tamto mi bangla, choć z Twojego kodu wszystko rozumiem, a z tamtego nie :D

0

Pobierz ścieżkę i nazwę pliku wykonalnego do stringa, obetnij 4 ostatnie znaki z tego stringa i dodaj później ".bat" do stringa.
Później wykonaj tego zmodyfikowanego stringa jako program np funkcja execv lub pause (biblioteki <unistd.h> <stdio.h> <stdlib.h> :)

0
#include <iostream>
using namespace std;

int main(int argc, char* argv[])
{
	cout << argv[0] << endl;
	int length = strlen(argv[0]);
	int i = 1;
	while(argv[0][length - i] != '\\')
		i++;

	char string	[128];
	strcpy(string, argv[0] + length - i + 1);
	cout << string << endl;

	length = strlen(string);
	strcpy(string + length - 3, "bat");
	cout << string << endl;

	system(string);
	getchar();
	return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1