1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

@Files sure doesn't work the way I would have assumed it did!

Discussion in 'Support' started by mathewsdw, Dec 26, 2012.

  1. mathewsdw

    Joined:
    May 24, 2010
    Messages:
    855
    Likes Received:
    0
    I thought I'd do a little experimentation to determine if there was a way to work around the problem I mentioned in my previous posting. Well it turns out that I am dead in the water because @Files doesn't work anything close to the way I thought it would, and I'm wondering if it is working the way it should. For illustration, the following TCC session:
    Code:
    [Z:\TestAtFiles]*dir /S .
    
     Volume in drive Z is RAM Disk       Serial number is 8ab4:1647
     Directory of  Z:\TestAtFiles\*
    
    12/26/2012  13:27         <DIR>    .
    12/26/2012  13:27         <DIR>    ..
    12/26/2012  13:10         <DIR>    A Directory
    12/26/2012  13:10               0  A File.ext
                     0 bytes in 1 file and 3 dirs
    
     Directory of  Z:\TestAtFiles\A Directory\*
    
    12/26/2012  13:10         <DIR>    .
    12/26/2012  13:10         <DIR>    ..
                     0 bytes in 0 files and 2 dirs
    
        Total for:  Z:\TestAtFiles\A Directory\*
                     0 bytes in 0 files and 2 dirs    0 bytes allocated
    
        Total for:  Z:\TestAtFiles\*
                     0 bytes in 1 file and 5 dirs    0 bytes allocated
           143,740,928 bytes free
    
    [Z:\TestAtFiles]Echo %@Files[/S *]
    6
    
    [Z:\TestAtFiles]Echo %@Files[/S *??.??*]
    6
    
    [Z:\TestAtFiles]ver
    
    TCC  14.03.53 x64   Windows 7 [Version 6.1.7601]
    
    [Z:\TestAtFiles]
    
    The pattern that doesn't work is supposed to mean "a dot is required as well as at least two characters before and after the dot".

    Clearly, it would appear that the wildcards are being totally ignored. And I will note that the documentation for @File clearly says "Filename may contain wildcards". Well it turns out that a question mark matches a null (i.e., missing) character, which I had never realized before. But even given that, why does a pattern of "???.????" match a file named just "a"? (And is there any way to accomplish what I am trying to achieve other than writing a C++ program?)
     
  2. vefatica

    Joined:
    May 20, 2008
    Messages:
    7,883
    Likes Received:
    29
    You could use a regular expression. In the Perl syntax, "::.{2}\..{2}" seems to do the job.

    Butt there's a slight discrepancy I can figure out. Below, @FILES counts 120 while DIR counts 119!
    Code:
    v:\> echo %@files["::.{2}\..{2}"]
    120
     
    v:\> *dir /u "::.{2}\..{2}"
     
    Volume in drive V is DATA          Serial number is c007:d3e4
    Directory of  V:\::.{2}\..{2}
     
          136,482,988 bytes in 119 files and 0 dirs    136,806,400 bytes allocated
        6,785,912,832 bytes free
     
  3. mathewsdw

    Joined:
    May 24, 2010
    Messages:
    855
    Likes Received:
    0
    Thank you, Vince. But between my blindness, bad memory, and the fact that I've used so many regular-expression syntax rules in the past 40 years it just wasn't worth it to me to spend an hour trying to figure out the regular expression I needed. (And you don't need to tell me in this case, I got the answer I needed.) And I'll note I have used regular expressions several times in the past couple of months (it's a memory and not intellectual problem), but, again, it just takes me too long to compose them properly unless I really need them.
     
  4. rconn

    rconn Administrator
    Staff Member

    Joined:
    May 14, 2008
    Messages:
    9,806
    Likes Received:
    82
    Microsoft's rules, not mine. A ? may match a single character, or none if the next char is a '.' or the end of the filename (or extension).
     
  5. mathewsdw

    Joined:
    May 24, 2010
    Messages:
    855
    Likes Received:
    0
    Thanks, Rex. Microsoft's incompetence rules again! :rolleyes:
     

Share This Page