WinBatch Tech Support Home

Database Search

If you can't find the information using the categories below, post a question over in our WinBatch Tech Support Forum.

TechHome

Validation UDFs

Can't find the information you are looking for here? Then leave a message over on our WinBatch Tech Support Forum.

Validate File Names


    #DEFINEFUNCTION validate_File_Name(File,Code)          ; Quick File Validation UDF v1.0.
    ; Steffen Fraas 20010417 sfraas@zoo.co.uk

    ; This UDF can be used to validate a DOS or Windows file name.

          ; File - File name
          ; code 1 - dos file name convention 8.3
          ;          File name check using abcdefghijklmnopqrstuvwxyz0123456789_^$~!%%&#-{}()@'` as per MS-DOS reference manual.
          ;          Directory extension not supported
          ;
          ; code 0 - Windows Long file name convention
          ;          File name check for a maximum lenght of 215 characters
          ;          All characters 01-255 (01h to ffh) except \/:*?"<>| are valid in long filenames
          ;
          ; Return 1 - good filename
          ; Return 0 - bad filename

         Alph="abcdefghijklmnopqrstuvwxyz0123456789_^$~!%%&#-{}()@'`" ; Dos valid file name characters.
         Badfile=0                                         ; Bad file name return code.
         Goodfile=1                                        ; Good file name.
         File=StrLower(File)                               ; Work in lower case.
         IF Code                                           ; Dos file name ?
              IF StrLen(File)>12 THEN RETURN Badfile       ; Invalid DOS file name length.
              X=StrScan(File,".",1,@Fwdscan)               ; Check extension.
              IF X                                         ; Extension used?
                   IF StrLen(File)-X>3 || StrLen(File)-X<1 || !validate_Dir(Alph,StrSub(File,X+1,StrLen(File)-X),Code) THEN RETURN Badfile ; Bad Dos extension.
                   File=StrSub(File,1,X-1)                 ; Root file name.
                 ENDIF
              IF StrLen(File)>0 && StrLen(File)<9 && validate_Dir(Alph,File,Code) THEN RETURN Goodfile ; Good Dos filename.
                 ELSE RETURN Badfile                       ; Invalid DOS filename.
            ELSE                                           ; Check out long filename.
              X                =StrCat(Num2Char(001),Num2Char(002),Num2Char(003),Num2Char(004),Num2Char(005),Num2Char(006),Num2Char(007),Num2Char(008),Num2Char(009))
              X=StrCat(X,Num2Char(010),Num2Char(011),Num2Char(012),Num2Char(013),Num2Char(014),Num2Char(015),Num2Char(016),Num2Char(017),Num2Char(018),Num2Char(019))
              X=StrCat(X,Num2Char(020),Num2Char(021),Num2Char(022),Num2Char(023),Num2Char(024),Num2Char(025),Num2Char(026),Num2Char(027),Num2Char(028),Num2Char(029))
              X=StrCat(X,Num2Char(030),Num2Char(031),Num2Char(032),Num2Char(033),Num2Char(035),Num2Char(036),Num2Char(037),Num2Char(038),Num2Char(039))
              X=StrCat(X,Num2Char(040),Num2Char(041),Num2Char(043),Num2Char(044),Num2Char(045),Num2Char(046),Num2Char(048),Num2Char(049))
              X=StrCat(X,Num2Char(050),Num2Char(051),Num2Char(052),Num2Char(053),Num2Char(054),Num2Char(055),Num2Char(056),Num2Char(057),Num2Char(059))
              X=StrCat(X,Num2Char(061),Num2Char(064),Num2Char(065),Num2Char(066),Num2Char(067),Num2Char(068),Num2Char(069))
              X=StrCat(X,Num2Char(070),Num2Char(071),Num2Char(072),Num2Char(073),Num2Char(074),Num2Char(075),Num2Char(076),Num2Char(077),Num2Char(078),Num2Char(079))
              X=StrCat(X,Num2Char(080),Num2Char(081),Num2Char(082),Num2Char(083),Num2Char(084),Num2Char(085),Num2Char(086),Num2Char(087),Num2Char(088),Num2Char(089))
              X=StrCat(X,Num2Char(090),Num2Char(091),Num2Char(093),Num2Char(094),Num2Char(095),Num2Char(096),Num2Char(097),Num2Char(098),Num2Char(099))
              X=StrCat(X,Num2Char(100),Num2Char(101),Num2Char(102),Num2Char(103),Num2Char(104),Num2Char(105),Num2Char(106),Num2Char(107),Num2Char(108),Num2Char(109))
              X=StrCat(X,Num2Char(110),Num2Char(111),Num2Char(112),Num2Char(113),Num2Char(114),Num2Char(115),Num2Char(116),Num2Char(117),Num2Char(118),Num2Char(119))
              X=StrCat(X,Num2Char(120),Num2Char(121),Num2Char(122),Num2Char(123),Num2Char(125),Num2Char(126),Num2Char(127),Num2Char(128),Num2Char(129))
              X=StrCat(X,Num2Char(130),Num2Char(131),Num2Char(132),Num2Char(133),Num2Char(134),Num2Char(135),Num2Char(136),Num2Char(137),Num2Char(138),Num2Char(139))
              X=StrCat(X,Num2Char(140),Num2Char(141),Num2Char(142),Num2Char(143),Num2Char(144),Num2Char(145),Num2Char(146),Num2Char(147),Num2Char(148),Num2Char(149))
              X=StrCat(X,Num2Char(150),Num2Char(151),Num2Char(152),Num2Char(153),Num2Char(154),Num2Char(155),Num2Char(156),Num2Char(157),Num2Char(158),Num2Char(159))
              X=StrCat(X,Num2Char(160),Num2Char(161),Num2Char(162),Num2Char(163),Num2Char(164),Num2Char(165),Num2Char(166),Num2Char(167),Num2Char(168),Num2Char(169))
              X=StrCat(X,Num2Char(170),Num2Char(171),Num2Char(172),Num2Char(173),Num2Char(174),Num2Char(175),Num2Char(176),Num2Char(177),Num2Char(178),Num2Char(179))
              X=StrCat(X,Num2Char(180),Num2Char(181),Num2Char(182),Num2Char(183),Num2Char(184),Num2Char(185),Num2Char(186),Num2Char(187),Num2Char(188),Num2Char(189))
              X=StrCat(X,Num2Char(190),Num2Char(191),Num2Char(192),Num2Char(193),Num2Char(194),Num2Char(195),Num2Char(196),Num2Char(197),Num2Char(198),Num2Char(199))
              X=StrCat(X,Num2Char(200),Num2Char(201),Num2Char(202),Num2Char(203),Num2Char(204),Num2Char(205),Num2Char(206),Num2Char(207),Num2Char(208),Num2Char(209))
              X=StrCat(X,Num2Char(210),Num2Char(211),Num2Char(212),Num2Char(213),Num2Char(214),Num2Char(215),Num2Char(216),Num2Char(217),Num2Char(218),Num2Char(219))
              X=StrCat(X,Num2Char(220),Num2Char(221),Num2Char(222),Num2Char(223),Num2Char(224),Num2Char(225),Num2Char(226),Num2Char(227),Num2Char(228),Num2Char(229))
              X=StrCat(X,Num2Char(230),Num2Char(231),Num2Char(232),Num2Char(233),Num2Char(234),Num2Char(235),Num2Char(236),Num2Char(237),Num2Char(238),Num2Char(239))
              X=StrCat(X,Num2Char(240),Num2Char(241),Num2Char(242),Num2Char(243),Num2Char(244),Num2Char(245),Num2Char(246),Num2Char(247),Num2Char(248),Num2Char(249))
              X=StrCat(X,Num2Char(250),Num2Char(251),Num2Char(252),Num2Char(253),Num2Char(254),Num2Char(255))
              Alph=X
              IF StrLen(File)>0 && StrLen(file)<216 && validate_Dir(Alph,File,Code) THEN RETURN Goodfile ; Good long filename.
                 ELSE RETURN Badfile                       ; Invalid long filename.
            ENDIF
       #ENDFUNCTION
    #DEFINEFUNCTION validate_Dir(Alph,Dir,Code)            ; Check for valid file name characters.
              ; Alph - Valid file name characters
              ; Dir  - File root/extension
              ; Code 1 - Dos file name check
              ; code 0 - Windows file name check
              ;
              ; return 1 - good File root/extension name
              ; return 0 - invalid File root/extension name
         IF Code==1                                        ; Dos file name check?
              Nodosname=" clock$ con aux com1 com2 com3 com4 lpt1 lpt2 lpt3 nul prn " ; Reserved Dos file names.
              IF StrIndexNc(Nodosname,StrCat(" ",Dir," "),1,@Fwdscan) THEN RETURN 0 ; Invalid dos file name.
            ENDIF
         FOR X=1 TO StrLen(Dir)
              IF StrScan(Alph,StrSub(Dir,X,1),1,@Fwdscan) THEN CONTINUE ; Valid file name character.
                 ELSE RETURN 0                             ; Invalid file name character.
            NEXT
         RETURN 1
       #ENDFUNCTION



       ; Examples
    IF validate_File_Name("validdos.fil",1) THEN Message("validdos.fil","Valid dos file name")
    IF validate_File_Name("Prn.wbt",1) THEN Message("","Valid dos file name")
       ELSE Message("Prn.wbt","Invalid - reserved Dos file name")
    IF validate_File_Name("aaaaaaaaaaaaaaaaaaaaPrn.wbt",0) THEN Message("aaaaaaaaaaaaaaaaaaaaPrn.wbt","Valid Windows file name")
    IF validate_File_Name(StrCat(Num2Char(169),"aaaaaaaaaaaaaaaaaaaaPrn.wbt"),0) THEN Message(StrCat(Num2Char(169),"aaaaaaaaaaaaaaaaaaaaPrn.wbt"),"Valid Windows file name with copyright")
    

Article ID:   W15015
File Created: 2001:11:08:12:41:20
Last Updated: 2001:11:08:12:41:20