Avatar billede bumbastic Nybegynder
04. august 2005 - 16:27 Der er 5 kommentarer

Cmd.exe ændre specialtegn i batch-fil??

Hej,

Jeg laver en fil ved navn test.bat, som indeholder denne linie:
copy "C:\test.txt" "C:\€€€€.txt"
Jeg køre den med cmd.exe, men i promten står der denne linie:
copy "C:\test.txt" "C:\ÇÇÇÇ.txt"

Hvorfor bliver € til Ç og hvordan får jeg cmd.exe til at læse test.bat rigtigt. Det er tilsyneladende galt med alle specialtegn.

Håber nogen kan hjælpe.
Thomas.
Avatar billede bertelbrander Novice
04. august 2005 - 19:32 #1
Windows og cmd.exe bruger forskellige tegnsæt.
Du kan redigere bat filen i edit, det er et "DOS" program der bruger samme tegnsæt som cmd.exe
Avatar billede bumbastic Nybegynder
05. august 2005 - 10:23 #2
Jeg kan ikke lave filen i edit, da det er en dynamisk batch-fil, som genereres og eksekveres straks efter af en eksekverbar fil (program). Jeg har kildekoden til programmet, som er skrevt i C++, kompilleres med MSVS6.0 og batch-filen generes med ofstream. Eksempel:

ofstream batFile;

CreateDirectory(destination,NULL);
// open file
batFile.open("C:\CopyTest.bat");
batFile << "copy \"" << source << "\" \"" << destination << "\"\n";
batFile.close();

Jeg ved der findes andre måder at kopiere på, men jeg har brug for at lave dynamiskgenererede batch-filer med specialtegn fra en eksekverbar fil, som er kompatibel med cmd.exe's tegnsæt. Kan jeg anvende noget andet end ofstream, eller få ofstream's tegnsæt til at matche cmd.exe's tegnsæt? Eller er der en helt anden løsning?
Avatar billede bertelbrander Novice
05. august 2005 - 20:35 #3
Du kan bruge Windows api funktionen CharToOem:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/resources/strings/stringreference/stringfunctions/chartooem.asp

Så kan du lave kode som:
#include <iostream>
#include <string>
#include <windows.h>

std::string CharToOem(const std::string &aStr)
{
  std::string Dest;
  Dest.resize(aStr.size() + 1);
  CharToOem(aStr.c_str(), (char *)Dest.c_str());
  return Dest;
}

int main()
{
  std::string s = CharToOem("abcÆØÅ");
  std::cout << s << std::endl;
}

Du kan evt kombinere det med en std::stringstream.
Avatar billede bumbastic Nybegynder
08. august 2005 - 10:26 #4
Det virker ikke med CharToOem!
C:\ÆØÅæøå\ bliver til
C:\’O‘o†\ problemet er bare flyttet fra cmd.exe og ind i koden. Jeg har brug for at de tegn som brugeren taster ind i stien, også er de tegn som anvendes i stien når batch-filen eksekveres med cmd.exe. Det hjælper ikke at ændre tegnene i batch-filen da de stadig ikke vil matche sti og filnavn på den fysiske disk. Alle tegn som er lovligt at anvende i mappe- og fil- navne skal kunne indtastes af en bruger for senere blive anvendt til filoperationer på disken. Skriver brugerne 'æøå' i et filnavn, skal der også stå æøå i navnet på den fysiske-fil nå den vises med f.eks. MS Explorer.
Avatar billede bertelbrander Novice
08. august 2005 - 20:56 #5
Ups, jeg fik vendt dem forkert! Byt CharToOem ud med OemToChar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester