[BATCH-file] string checken of het aanhalingstekens bevat

Pagina: 1
Acties:

  • Boy
  • Registratie: November 2001
  • Laatst online: 18:30

Boy

www.byoscoop.nl

Topicstarter
Ik heb zitten googlen als een idioot, maar krijg het niet voor elkaar! Ik heb erg weinig ervaring met batch programmeren.

ik wil een argument meegeven aan een batch bestand. maar soms doet de gebruiker
test.bat "c:\dit is een bestand met spaties.txt" meegeven, en soms
test.bat bestandje.txt

Om intern met allebei om te kunnen gaan, wil ik eigenlijk altijd " " eromheen zetten. Ik heb nu dit:
code:
1
2
3
4
5
6
7
8
REM haal input file op
SET inputFile=%1

REM pak het eerste karakter
set firstChar=%inputFile:~0,1%

REM indien eerste karakter niet een " is, dan voor en achteraan " toevoegen
IF NOT [%firstChar%]==["] SET inputFile="%inputFile%"


output wanneer ik 'm run:

SET was unexpected at this time.
C:\Documents and Settings\nl26703\My Documents>IF NOT ["]==["] SET inputFile="bestandje.txt"

Op een of andere manier kan hij niet met die quotes omgaan in de vergelijken! heb proberen te escapen met \", maar dat lukt ook niet! Zodra ik bijvoorbeeld neerzet

code:
1
IF NOT [a]==[a]


dan vindt ie het geen probleem en voert ie dat uit. Het is dus een probleem dat hij verwacht dat het een string is en dat deze afgesloten moet worden met een dubbele quote.

Iemand enig idee hoe ik dit voor elkaar krijg?

Naar de bioscoop? => gebruik de app op Byoscoop.nl


  • Boy
  • Registratie: November 2001
  • Laatst online: 18:30

Boy

www.byoscoop.nl

Topicstarter
Ok...heb ik NET een topic geopend, en ga je nog even verder kijken omdat je andere zoekwoorden in de kop schieten, kom ik op een site uit waar ze eventuele quotes weghalen voor en achteraan in een string.

Nu doe ik die functie dus gebruiken om eventuele quotes weg te halen, en vervolgens voeg ich ze weer toe erna (dit is om te voorkomen dat dubbele dubbele quotes voor en achter komen).

Dit is de site trouwens: http://www.ss64.com/ntsyntax/dequote.txt

Naar de bioscoop? => gebruik de app op Byoscoop.nl


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Vaan Banaan
  • Registratie: Februari 2001
  • Niet online

Vaan Banaan

Heeft ook Apache ontdekt

Je was toch al een heel stuk op de goede weg hoor.
Alleen kun je niet zo makkelijk op een enkele " testen. Als je de firstChar vult met het eerste EN laatste karakter, kan je dat wel vergelijken met ""
code:
1
set firstLastChar=%inputFile:~0,1%%inputFile:~-1%

500 "The server made a boo boo"


  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)


  • Boy
  • Registratie: November 2001
  • Laatst online: 18:30

Boy

www.byoscoop.nl

Topicstarter
Vaan Banaan schreef op maandag 24 september 2007 @ 15:34:
Je was toch al een heel stuk op de goede weg hoor.
Alleen kun je niet zo makkelijk op een enkele " testen. Als je de firstChar vult met het eerste EN laatste karakter, kan je dat wel vergelijken met ""
code:
1
set firstLastChar=%inputFile:~0,1%%inputFile:~-1%
Inderdaad...maar uiteindelijk heb ik het nog handiger voor elkaar gekregen wat ik wil. Kwam erachter dat je makkelijke commando's kan gebruiken die het niet boeit of er " in staan of niet.

Doel was om een datum in een bestandsnaam te krijgen bij copieren. Is zo opgelost:


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@echo off

REM check if a filename is given
IF [%1]==[] goto end

REM this is used to set 'date' to a certain format for easy usage further
FOR /F "TOKENS=1* DELIMS= " %%A IN ('DATE/T') DO SET CDATE=%%B 
FOR /F "TOKENS=1,2 eol=/ DELIMS=/ " %%A IN ('DATE/T') DO SET mm=%%B 
FOR /F "TOKENS=1,2 DELIMS=/ eol=/" %%A IN ('echo %CDATE%') DO SET dd=%%B 
FOR /F "TOKENS=2,3 DELIMS=/ " %%A IN ('echo %CDATE%') DO SET yyyy=%%B 
SET date=%mm%%dd%%yyyy% 

REM get input file name without extension
SET inputFileNoExt=%~n1

REM get extension if input file
SET ext=%~x1

REM construct nieuw file name with date
SET newFileName=%inputFileNoExt%%date:~6,4%%date:~3,2%%date:~0,2%%ext%

REM do the copy
copy %1 "%newFileName%"

:end


dacht ik plaats het effe voor als mensen in de toekomst gaan zoeken op GoT en mijn topic tegenkomen :)

Naar de bioscoop? => gebruik de app op Byoscoop.nl


  • Vaan Banaan
  • Registratie: Februari 2001
  • Niet online

Vaan Banaan

Heeft ook Apache ontdekt

Alright.
Die datumconversie werkt goed, maar kan een stuk sneller:
code:
1
2
FOR /F "TOKENS=2,3,4* DELIMS=-/ " %%A IN ('DATE/T') DO SET date=%%C%%B%%A
echo %date%

Geeft met DATE/T -> %date%:
NL: ma 24-09-2007 -> 20070924
US: mon 09/24/2007 -> 20072409 (zo te zien heb jij deze)

500 "The server made a boo boo"

Pagina: 1