zappelectric19 Posted October 13, 2010 Share Posted October 13, 2010 I have XP-Pro SP3 with Power Shell installed. I need a script I can drag and drop files and folders onto that will copy them maintaining the attributes of the source. Specifically most of my folders have distributable custom icons. Each folder contains both a "desktop.ini" file and an associated "FolderMarker.ico" the "desktop.ini" file points to. Both of these files have "system" and "hidden" attributes. In order for the folders to display the custom icons when copied to another computer these files have to keep the "system" attribute and I want the "hidden" attribute maintained as well. I haven't been able to do this using VBscript. I have to use XXcopy which doesn't allow me to copy by just dropping the folders on the script. (VBscript does allow me to copy by dropping items on the script but the copied folder icons are not distributable because the "system" and "hidden" attributes of the "desktop.ini" and "FolderMarker.ico" are lost when copied by that method. I would really appreciate a script to accomplish this. Below is the VBscript to which I refer. Thanks.On Error Resume NextConst OverwriteExisting = TrueSet objArgs = WScript.ArgumentsSet objFSO = CreateObject("Scripting.FileSystemObject")If objArgs.Count < 1 Then WScript.QuitEnd IfFor I = 0 to objArgs.Count - 1 Arg = objArgs(I) objFSO.CopyFile Arg, "C:\Program Files\", OverwriteExisting objFSO.CopyFile Arg, "D:\0 aAPPS\00 a Install First\Program Files\", OverwriteExisting objFSO.CopyFolder Arg, "C:\Program Files\", OverwriteExisting objFSO.CopyFolder Arg, "D:\0 aAPPS\00 a Install First\Program Files\", OverwriteExistingNextWScript.Quit Link to comment Share on other sites More sharing options...
CoffeeFiend Posted October 14, 2010 Share Posted October 14, 2010 Not that I would write the script this way (it tries to copy every arg passed both as a file and a folder), but it does preserve S & H attributes on files such as desktop.ini.However, that isn't enough for the OS to actually make use of the desktop.ini file i.e. custom icons are missing even if the proper file is copied in there (still with S & R set), even if it was copied by other means. You actually have to set the read only attribute on the folder for desktop.ini files to work, and that isn't copied over.There is no perfect solution to this. You could copy everything over, and then going on a hunt, parsing every single folder, enumerating files, looking for anything named desktop.ini (and other similar names) and if found setting the R attribute on its parent folder. Or you could blindly set it on every folder and all of its sub-folders. Or if you know there are no sub-folders with custom icons, then you can simply check the attributes of the folder you're copying and then set that after on the newly created folder in the destination, kinda like this:Option ExplicitDim fso, folder, attr, arg, iConst dst = "C:\Where\To\" 'must have the trailing backslashSet fso = CreateObject("Scripting.FileSystemObject")If WScript.Arguments.Count < 1 Then WScript.QuitFor i = 0 to WScript.Arguments.Count - 1 arg = WScript.Arguments(i) If (fso.FileExists(arg)) Then fso.CopyFile arg, dst, true Else Set folder = fso.GetFolder(arg) attr = folder.Attributes fso.CopyFolder arg, dst, true Set folder = fso.GetFolder(dst + folder.Name) folder.Attributes = attr End IfNext Link to comment Share on other sites More sharing options...
zappelectric19 Posted October 14, 2010 Author Share Posted October 14, 2010 I had forgotten my "Folder Marker.BAT" file makes the folder a system folder. How would your script be written to copy a folder to multiple directories setting the attributes of the copied folder in each directory?This is how I assign distributable custom icons to foldersFirst I create the custom icon and copy it to a folder named "Folder Marker" where I have a system file "desktop.ini" file and a "Folder Marker.BAT file.FolderMarker.BAT@ECHO OFFecho "Enter FolderPath"set /p FolderPath=ATTRIB -h -s "%FolderPath%\FolderMarker.ico"DEL /F /Q "%FolderPath%\FolderMarker.ico"ATTRIB -h -s "%FolderPath%\Desktop.ini"DEL /F /Q "%FolderPath%\Desktop.ini"ren *ico FolderMarker.icoxxcopy Desktop.ini "%FolderPath%\" /H /YYxxcopy FolderMarker.ico "%FolderPath%\" /H /YYATTRIB +s "%FolderPath%"ATTRIB +h +s "%FolderPath%\FolderMarker.ico"DEL /F /Q FolderMarker.icoexit"desktop.ini"[.ShellClassInfo]IconFile=FolderMarker.icoIconIndex=0When I run the batch file it asks for the path of the folder for the custom icon, removes the attributes of the "desktop.ini" and "FolderMarker.ico", deletes them, renames my chosen icon as "FolderMarker.ico", copies both the renamed icon and the "desktop.ini" in the "Folder Marker" folder to the chosen folder, sets the attributes of the chosen folder to "s",sets the attributes of the copied icon in the chosen folder to "s" and "h", and then deletes the "FolderMarker.ico" remaining in the "Folder Marker" folder.Since most of the folders I copy are system folders with custom icons, would making every folder and subfolder copied a system folder have an adverse effect if I used it for only copying folders with at the most 3 subfolders. Thank you for taking the time to help me. Link to comment Share on other sites More sharing options...
CoffeeFiend Posted October 17, 2010 Share Posted October 17, 2010 I had forgotten my "Folder Marker.BAT" file makes the folder a system folder. I'm just wondering why you would do this -- have a batch file along with the vbscript. The vbscript can easily take care of everything the batch file does (renaming, deleting, changing attributes...)How would your script be written to copy a folder to multiple directories setting the attributes of the copied folder in each directory?This stuff is trivial. At this point, what we need is to understand what gets copied where and so on properly -- basically what you're trying to accomplish.Right now I'm more or less lost as to where the icons and desktop.ini files are coming from and going to. There seems to be some working directory, a "folder marker" one, then the other destination folders... You copy some files manually in one of them, then tell a batch file to get them from there and then it copies them into another place (instead of just saving the icon there in the first place). Then you run the vbscript to recopy it again elsewhere? I just can't seem to grasp how it all works.I would help, but it's hard writing a script that does something you don't understand. You have made far more of an effort to describe it than most people normally do around here though, sorry I just can't make sense out of it.Since most of the folders I copy are system folders with custom icons, would making every folder and subfolder copied a system folder have an adverse effect if I used it for only copying folders with at the most 3 subfolders. Setting that attribute shouldn't harm anything. Link to comment Share on other sites More sharing options...
zappelectric19 Posted October 17, 2010 Author Share Posted October 17, 2010 (edited) My Problem was solved on another forum and the script provided there worked perfectly! Here is the link Edited October 17, 2010 by zappelectric19 Link to comment Share on other sites More sharing options...
CoffeeFiend Posted October 18, 2010 Share Posted October 18, 2010 My Problem was solved on another forum and the script provided there worked perfectly! There's many ways to skin a cat (it's just another way to copy files than I used, and there are some more too e.g. using WMI). I still think there would be a better way (not involving a batch + a vbscript), but seemingly you're happy with this anyway, and since I still don't know what it's meant to do (as in, the big picture) I can't really come up with anything else either. Link to comment Share on other sites More sharing options...
zappelectric19 Posted October 18, 2010 Author Share Posted October 18, 2010 Thank you "CoffeeFiend" for taking the time to read my post and to offer your wise suggestions. Link to comment Share on other sites More sharing options...
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now