Program uruchamiający plik bat o tej samej nazwie

2011-09-26 14:02
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;
}

Pozostało 580 znaków

2011-09-26 14:26
#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


░█░█░█░█░█░█░█░█░█░█░█░
edytowany 1x, ostatnio: krwq, 2011-09-26 14:28

Pozostało 580 znaków

2011-09-26 14:30
1
string s = argv[0];
s.erase(s.length()-3,3);
s = s + "bat";
WinExec(s.c_str(), SW_SHOW)

MSDN o WinExec: This function is provided only for compatibility with 16-bit Windows. ale na stringach faktycznie jest krócej, aczkolwiek lubię się pobawić wskaźnikami :P - krwq 2011-09-26 14:34
Zawsze może uruchomić właśnie przez ShellExecute(), albo w akcie rozpaczy porwać się na "system()". - ujemny 2011-09-26 14:40

Pozostało 580 znaków

2011-09-26 14:31
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


edytowany 1x, ostatnio: dzek69, 2011-09-26 14:32

Pozostało 580 znaków

2011-09-26 14:33
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> :)

tyle to ja wiem, logikę kojarzę, bom programista :> - dzek69 2011-09-26 14:35

Pozostało 580 znaków

2011-09-26 14:49
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;
}

Gdy się nie wie, co się robi, to dzieją się takie rzeczy, że się nie wie, co się dzieje ;-)

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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