Ich verzweifle hier gerade... entweder habe ich ein meterdickes Brett vor dem Kopf, oder paramStr()/getFileInfo()/splitFile() sind tatsächlich fehlerhaft.
Eigentlich will ich nur wissen, ob der übergebene Parameter ein Verzeichnis oder ein File ist... dafür habe ich folgendes Script geschrieben:
import os
echo "\nparamCount() = " & $paramCount()
if paramCount() > 0:
for p in 0..paramCount():
echo "paramStr(" & $p & ") = " & $paramStr(p) # the final right backslash is cut off!
var fileSplit = splitFile($paramStr(p))
echo "dir = " & fileSplit.dir
echo "name = " & fileSplit.name
echo "ext = " & fileSplit.ext
var oFileInfo = getFileInfo(paramStr(p)) # and here he still triggers an error!
echo "oFileInfo.kind = " & $oFileInfo.kind & "\n"
Alles anzeigen
Das Problem dabei ist nun, dass ein Pfad keinen abschließenden Backslash haben darf, weil getFileInfo() sonst meckert und das Script abgebrochen wird. Hinzu kommt, das paramStr() den abschließenden Backslash nicht anzeigt, wobei getFileInfo() diesen aber dennoch bemeckert und deswegen das Script abbricht. Beim zweiten Parameter kommt der nächste Fehler bei splitFile()... da steht bei name = ... ein ", doch wenn das erste ausgefiltert wird, sollte das zweite auch nicht da sein. Und mit ' als Begrenzer geht es ja mal gar nicht...
Hier der Aufruf des Scripts, einmal mit "" und einmal mit '' als Begrenzer, und die Ausgabe:
Spoiler anzeigen
M:\Temp>Test.exe "f:\Audio\MP3\Top\Top 40 Oldies Forever" "f:\Audio\MP3\Top\Top 40 Oldies Forever\"
paramCount() = 2
paramStr(0) = Test.exe
dir =
name = Test
ext = .exe
oFileInfo.kind = pcFile
paramStr(1) = f:\Audio\MP3\Top\Top 40 Oldies Forever
dir = f:\Audio\MP3\Top
name = Top 40 Oldies Forever
ext =
oFileInfo.kind = pcDir
paramStr(2) = f:\Audio\MP3\Top\Top 40 Oldies Forever"
dir = f:\Audio\MP3\Top
name = Top 40 Oldies Forever"
ext =
c:\Users\ghost\NIM\@Bitnugger\Test.nim(11) Test
C:\Users\ghost\scoop\apps\nim\current\lib\pure\os.nim(3156) getFileInfo
C:\Users\ghost\scoop\apps\nim\current\lib\pure\includes\oserr.nim(94) raiseOSError
Error: unhandled exception: Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch.
Additional info: "f:\\Audio\\MP3\\Top\\Top 40 Oldies Forever\"" [OSError]
M:\Temp>Test.exe 'f:\Audio\MP3\Top\Top 40 Oldies Forever' 'f:\Audio\MP3\Top\Top 40 Oldies Forever\'
paramCount() = 8
paramStr(0) = Test.exe
dir =
name = Test
ext = .exe
oFileInfo.kind = pcFile
paramStr(1) = 'f:\Audio\MP3\Top\Top
dir = 'f:\Audio\MP3\Top
name = Top
ext =
c:\Users\ghost\NIM\@Bitnugger\Test.nim(11) Test
C:\Users\ghost\scoop\apps\nim\current\lib\pure\os.nim(3156) getFileInfo
C:\Users\ghost\scoop\apps\nim\current\lib\pure\includes\oserr.nim(94) raiseOSError
Error: unhandled exception: Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch.
Additional info: "\'f:\\Audio\\MP3\\Top\\Top" [OSError]
M:\Temp>
Ganz so perfekt ist Nim dann wohl doch nicht...
Und was mache ich jetzt?