Welcome!

By registering with us, you'll be able to discuss, share and private message with other members of our community.

SignUp Now!

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

May
855
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?)
 
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".

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
 
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.
 
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"?

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).
 

Similar threads

Back
Top