import clr
import System
import System.IO
# A small IronPython script to copy files and check for filename length violations on windows xp.
def CheckFilesRecursively(target):
"""
DirectoryInfo target
"""
#directory info
for x in target.GetDirectories():
CheckFilesRecursively(x)
if len(x.FullName) > 200:
print x.FullName, "lenth:", len(x.FullName)
#FileInfo
for x in target.GetFiles():
print x.FullName, "lenth:", len(x.FullName)
if len(x.FullName) > 255:
print x.FullName, "lenth:", len(x.FullName)
def CopyFilesRecursively(source, target):
"""
DirectoryInfo source, DirectoryInfo target
"""
for x in source.GetDirectories():
print "Creatig Directory:", target.FullName + x.Name
CopyFilesRecursively(x, target.CreateSubdirectory(x.Name));
for x in source.GetFiles():
print "Copying:", x.FullName
try:
x.CopyTo(System.IO.Path.Combine(target.FullName, x.Name), True); #overwrite
except System.Exception as ex:
WriteLine(ex)
def WriteLine(msg):
filePath = System.IO.Path.Combine("MajorSilence-Debug.txt")
System.IO.File.AppendAllText(filePath, System.DateTime.Now.ToLongDateString() + " " + System.DateTime.Now.ToLongTimeString() + System.Environment.NewLine)
System.IO.File.AppendAllText(filePath, msg.Message + System.Environment.NewLine + msg.StackTrace + System.Environment.NewLine)
System.IO.File.AppendAllText(filePath, System.Environment.NewLine + System.Environment.NewLine)
if __name__ == "__main__":
help_msg="""
-s source directory to copy files
-t target directory to copy files
-c if found it will copy the -s to the -t if not found -s and -t will have filename length check run
-h Display Help
"""
source_path=""
target_path=""
copy_source=False
help=False
for i, x in enumerate(System.Environment.GetCommandLineArgs()):
if x == "-s": # source
source_path = System.Environment.GetCommandLineArgs()[i+1]
elif x == "-t": # target
target_path = System.Environment.GetCommandLineArgs()[i+1]
elif x == "-c": # Copy source to target
copy_source = True
elif x == "-h" or x == "--help":
help=True
e_length = len(System.Environment.GetCommandLineArgs())
if help or System.Environment.GetCommandLineArgs()[e_length-1] == "check-filename-length.py":
print help_msg
System.Environment.Exit(0)
print "source path:",source_path
print "target path:",target_path
if copy_source:
CopyFilesRecursively(System.IO.DirectoryInfo(source_path), System.IO.DirectoryInfo(target_path))
else:
if source_path != "":
CheckFilesRecursively(System.IO.DirectoryInfo(source_path))
if target_path != "":
CheckFilesRecursively(System.IO.DirectoryInfo(target_path))