Kelvin Lomboy Mendez wrote: > > I’m currently writing a script to access approximately 400 computers > for removing a particular app from the system. I’m having problems > getting results using the wmi c.CIM_DataFile (name=file). When I use > file as a variable which equals to the path to the app I want to > remove I don’t get nothing back, however, if I hard code the path, I > get results. See snippet below for an example of what I’m talking > about. I appreciate in advance for any help I can get. Thank you. > > > > import wmi > > import re > > > > def queryFile(file, host): > > print '[Debug nukeXmas()]:' + file > > c = wmi.WMI(host) > > for f in c.CIM_DataFile (name=file): > > print 'Install Date:', f.InstallDate > > > > def queryFile2(file, host): > > print '[Debug nukeXmas()]:' + file > > c = wmi.WMI(host) > > for f in c.CIM_DataFile > (name="C:\\DOCUME~1\\profileName\\LOCALS~1\\Temp\\Temporary Directory > 1 for deluxetreee (2).zip\\Christmas.exe"): > > print 'Install Date:', f.InstallDate > > > > #File to query > > string = "C:\DOCUME~1\profileName\LOCALS~1\Temp\\Temporary Directory 1 > for deluxetreee (2).zip\Christmas.exe" > > > > #Substitute "\" to "\\" > > path = re.sub('\\\\', '\\\\\\\\', string) >
Don't do this. You WANT the string to contain single backslashes. This is one of the most confusing things about working with strings in Python on Windows. Here's a test. How many characters are in this string? xyz = "a\\b\tc" The answer is 5. There's a letter "a", a backslash, a letter "b", a tab, and a letter "c". When you pass a file name into an API, the name should only contain single backslashes (or forward slashes -- both work equally well in the Win32 API). In order to GET single backslashes in a Python string literal, you need to type TWO (or use the raw r"string" concept), but the string itself only contains one. > #Close query path with double quotes > > file = '"'+path+'"' > Don't do this either. The file name does not contain quotes. If you are typing the file name on a command-line, you have to provide quotes so they get handled by the command line parser properly, but when you're calling an API, you should NEVER use quotes. > #I'm having problems here, query brings back nothing > > queryFile(file, '172.27.1.5') > Right, because the file name you are passing here is literally this: "C:\\DOCUME~1\\profileName\\LOCALS~1\\Temp\\Temporary Directory 1 for deluxetreee (2).zip\\Christmas.exe" > > > #Here, I hard code the path to the exe and it works > > queryFile2(file, '172.27.1.5') > Right, because the file name you are passing here is literally this: C:\DOCUME~1\profileName\LOCALS~1\Temp\Temporary Directory 1 for deluxetreee (2).zip\Christmas.exe And THAT is what the file name really is. By the way, your whole concept is loony. This will not work at all on Vista or Win 7, because the "Documents and Settings" tree is now called "Users". You are assuming that every system is going to have this file as "...tree (2).zip", but depending on how many times it has been downloaded, it might be called something different (like "...tree.zip" or "...tree(3).zip"). Further, the directory names you are using are configurable. They don't have to be called "Documents and Setting" or "Local Settings", and they don't have to be located on "C:". You should be using the shell folder APIs to find the names of the "well-known folders". Plus, the whole "Local Settings\Temp" folder is volatile. You should just be able to wipe out that whole directory without causing any damage. -- Tim Roberts, t...@probo.com Providenza & Boekelheide, Inc. _______________________________________________ python-win32 mailing list python-win32@python.org http://mail.python.org/mailman/listinfo/python-win32