返回顶部

收藏

C#代码将指定目录的所有文件名转换成小写

更多
using System;
using System.IO;
using System.Linq;

namespace RobvanderWoude
{
    class LoCase
    {
        static int Main( string[] args )
        {
            string dir = string.Empty;
            string filespec = string.Empty;
            char[] trailingbackslash = "\\".ToCharArray( 0, 1 );
            char[] upcaseletters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray( 0, 26 );
            bool verbose = false;

            #region Command Line Parsing

            switch ( args.Length )
            {
                case 0:
                    return WriteError( string.Empty );
                case 1:
                    filespec = args[0].Trim( '"' );
                    break;
                case 2:
                    filespec = args[0].Trim( '"' );
                    if ( args[1].Substring( 0, 2 ).ToUpper( ) == "/V" )
                    {
                        verbose = true;
                    }
                    else
                    {
                        return WriteError( "Invalid command line switch: " + args[1] );
                    }
                    break;
                default:
                    return WriteError( string.Empty );
            }

            if ( string.IsNullOrWhiteSpace( filespec ) || filespec == "/?" )
            {
                return WriteError( string.Empty );
            }
            if ( filespec.IndexOfAny( "/?".ToCharArray( 0, 2 ) ) != -1 )
            {
                return WriteError( "Invalid file specification: \"" + filespec + "\"" );
            }

            #endregion Command Line Parsing

            try
            {
                // Check if the directory exists
                try
                {
                    dir = Path.GetDirectoryName( filespec );
                    if ( string.IsNullOrWhiteSpace( dir ) )
                    {
                        dir = Path.GetFullPath( "." );
                    }
                    if ( !Directory.Exists( dir ) )
                    {
                        return WriteError( "Directory not found: \"" + dir + "\"" );
                    }
                    dir = dir.TrimEnd( trailingbackslash ) + "\\";
                }
                catch ( ArgumentException )
                {
                    return WriteError( "Parent directory not found" );
                }

                // Extract the FILE specification (removing the path)
                string filenames = filespec.Substring( filespec.LastIndexOf( "\\" ) + 1 );
                // Enumerate the files
                string[] files = Directory.EnumerateFiles( dir, filenames ).ToArray<string>( );
                int count = 0;
                foreach ( string file in files )
                {
                    if ( File.Exists( file ) )
                    {
                        string filename = Path.GetFileName( file );
                        if ( filename.IndexOfAny( upcaseletters ) > -1 )
                        {
                            count++;
                            string newfilename = dir + filename.ToLowerInvariant( );
                            File.Move( file, newfilename );
                        }
                    }
                }
                if ( verbose )
                {
                    Console.WriteLine( "{0} matching file{1} renamed", ( count == 0 ? "No" : count.ToString( ) ), ( count == 1 ? string.Empty : "s" ) );
                }
                return count;
            }
            catch ( Exception e )
            {
                return WriteError( e.Message );
            }
        }

        public static int WriteError( Exception e )
        {
            return WriteError( e == null ? null : e.Message );
        }

        public static int WriteError( string errorMessage )
        {
            /*
            LoCase.exe,  Version 1.02
            Rename specified files to all lower case

            Usage:    LoCase.exe  filespec  [ /Verbose ]

            Where:    filespec    is (are) the file(s) to be renamed (wildcards allowed)
                      /Verbose    displays the number of files renamed

            Notes:    Use doublequotes if filespec contains spaces.
                      Return code (\"ErrorLevel\") equals the number of renamed files.
                      Switch may be abbreviated, e.g. /V instead of /Verbose.

            Written by Rob van der Woude
            http://www.robvanderwoude.com
            */

            if ( !string.IsNullOrWhiteSpace( errorMessage ) )
            {
                Console.Error.WriteLine( );
                Console.ForegroundColor = ConsoleColor.Red;
                Console.Error.Write( "ERROR: " );
                Console.ForegroundColor = ConsoleColor.White;
                Console.Error.WriteLine( errorMessage );
                Console.ResetColor( );
            }
            Console.Error.WriteLine( );
            Console.Error.WriteLine( "LoCase.exe,  Version 1.02" );
            Console.Error.WriteLine( "Rename specified files to all lower case" );
            Console.Error.WriteLine( );
            Console.Error.Write( "Usage:    " );
            Console.ForegroundColor = ConsoleColor.White;
            Console.Error.WriteLine( "LoCase.exe  filespec  [ /Verbose ]" );
            Console.ResetColor( );
            Console.Error.WriteLine( );
            Console.Error.Write( "Where:    " );
            Console.ForegroundColor = ConsoleColor.White;
            Console.Error.Write( "filespec" );
            Console.ResetColor( );
            Console.Error.WriteLine( "    is (are) the file(s) to be renamed (wildcards allowed)" );
            Console.ForegroundColor = ConsoleColor.White;
            Console.Error.Write( "          /V" );
            Console.ResetColor( );
            Console.Error.WriteLine( "erbose    displays the number of files renamed" );
            Console.Error.WriteLine( );
            Console.Error.WriteLine( "Note:     Use doublequotes if filespec contains spaces." );
            Console.Error.WriteLine( "          Return code (\"ErrorLevel\") equals the number of renamed files." );
            Console.Error.Write( "          Switch may be abbreviated, e.g. " );
            Console.ForegroundColor = ConsoleColor.White;
            Console.Error.Write( "/V" );
            Console.ResetColor( );
            Console.Error.Write( " instead of " );
            Console.ForegroundColor = ConsoleColor.White;
            Console.Error.Write( "/V" );
            Console.ResetColor( );
            Console.Error.WriteLine( "erbose." );
            Console.Error.WriteLine( );
            Console.Error.WriteLine( "Written by Rob van der Woude" );
            Console.Error.WriteLine( "http://www.robvanderwoude.com" );
            return 0;
        }

    }
}

标签:大小写,文件名,C#

收藏

0人收藏

支持

0

反对

0