Hey, Scripting Guy! How can I retrieve a list of all the files that have no file extension?
— JB
Hey, JB. Funny you should ask about no-hitters. Yes, it’s true: the Scripting Son was robbed of a no-hitter this past Saturday. With one out in the top of the seventh (you play just seven innings in Colt League baseball), the Scripting Son had a no-hitter going. The next batter dribbled a ball down the third base line. It was clearly a foul ball; at first the batter didn’t even run but just stood there and watched. Unfortunately, though, the home plate umpire didn’t see it that way. He called the ball fair and, after a mad scramble, the batter managed to get safely to first. Officially, it was a base hit and, officially, the no-hitter was over.
|
Note. Uh, no, it’s probably best if we don’t relate the opinions of the Scripting Son regarding this call. Let’s just say that he was happy the team won, and leave it at that. |
What’s that? Yes, we noticed that the question said “no file extension” rather than “no-hitter.” We just assumed that was a typo. Surely no one could be thinking about work at a time like this. (The time, of course, being baseball season.)
On the other hand, it’s theoretically possible that someone might be more interested in a scripting than they are in hearing about the pitching exploits of the Scripting Son. (Unlikely, but still possible.) Just in case JB really did mean “no file extension,” here’s a script that will take care of that:
strComputer = “.”Set objWMIService = GetObject(“winmgmts:\\” & strComputer & “\root\cimv2”)
Set colFiles = objWMIService.ExecQuery _ (“Select * from CIM_DataFile where Extension = ””)
For Each objFile in colFiles Wscript.Echo objFile.Name Next
Yes, it’s very easy. (After all, we’re entering the home stretch of the baseball season; we don’t have time to write long and complicated scripts!) As you can see, we begin by connecting to the WMI service on the local computer. Is it possible to connect to a remote computer and find all the files that don’t have file extensions? Of course it is: just assign the variable strComputer the name of the remote machine. For example, this modified line of code will cause the script to search the computer atl-fs-01 for files without file extensions (not to be confused with Doctors Without Borders, Parents Without Partners, or A Day Without Sunshine):
strComputer = “atl-fs-01”
After making the connection we then issue the following query:
Set colFiles = objWMIService.ExecQuery _
(“Select * from CIM_DataFile where Extension = ””)
What we’re doing here is querying the CIM_DataFile class, the WMI class used for managing files. Of course, we don’t want a list of all the files on the computer, just those that don’t have a file extension. To do that, we simply tack on a Where clause that limits returned data to files where the Extension property is equal to nothing (that is, an empty string: ‘’).
Our query returns a collection of all the files that don’t have a file extension. To review that list we set up a For Each loop to walk through the collection, and then echo back the Name (path) for each file found there. It’s that easy.
|
Note. Could we echo back other file properties besides Name? Sure; see the Microsoft Windows 2000 Scripting Guide for details. |
Here’s an equally sad story for you. Last Thursday one of our pitchers had a no-hitter after four innings. In the top of the fifth, the leadoff batter hit a ground ball right to the shortstop. Our shortstop took a little too much time, and then kind of lobbed the ball over to first. The batter beat it out for an infield single, the first – and only – hit the other team had all night. In other words, that’s twice in the span of just three days that we could have – and probably should have – had no-hitters. But we ended up with nothing at all.
Maybe we’ll give our pitchers a copy of the script that finds files that don’t have file extensions. That should cheer them up!
0 comments