2010-11-05 3 views
1

Ceci est le script batch j'utilise pour faire les dossiers pour un nouveau client:Faire la première lettre de l'entrée d'utilisateur un capital dans un script batch

@ECHO OFF 
SET /p clientLast=Enter Client's Last Name: 
SET /p clientFirst=Enter Client's First Name: 
ECHO Making Folders... 
MKDIR "%clientLast%, %clientFirst%" 
MKDIR "%clientLast%, %clientFirst%"\Budget 
MKDIR "%clientLast%, %clientFirst%"\"Business Registration" 
MKDIR "%clientLast%, %clientFirst%"\Correspondence 
MKDIR "%clientLast%, %clientFirst%"\"Financial Info" 
MKDIR "%clientLast%, %clientFirst%"\Forms 
MKDIR "%clientLast%, %clientFirst%"\Illustrations 
MKDIR "%clientLast%, %clientFirst%"\"Loans & Investments" 
MKDIR "%clientLast%, %clientFirst%"\"Personal Info" 
MKDIR "%clientLast%, %clientFirst%"\Recommendations 
MKDIR "%clientLast%, %clientFirst%"\"Tax Misc" 
TREE "%clientLast%, %clientFirst%" 
ECHO DONE~~~~~~~~~~~~~~~ 
PAUSE 

Je veux être en mesure d'ajouter la possibilité de automatiquement majuscule la première lettre de chaque mot.

J'ai trouvé un moyen de le faire en remplaçant toutes les lettres avec un espace devant lui avec son capital, ce qui ressemble à quelque chose comme:

FOR %%i IN ("a=A" " b= B" " c= C" " d= D" " e= E" " f= F" " g= G" " h= H" " i= I" " j= J" " k= K" " l= L" " m= M" " n= N" " o= O" " p= P" " q= Q" " r= R" " s= S" " t= T" " u= U" " v= V" " w= W" " x= X" " y= Y" " z= Z") DO CALL SET "%1=%%%1:%%~i%%" 

Mais cela ne capitalise pas le premier mot ...

Des idées?

Répondre

5

Ou avec lot pur ...

@echo off 
setlocal EnableDelayedExpansion 
call :FirstUp result hello 
echo !result! 

call :FirstUp result abc 
echo !result! 

call :FirstUp result zynx 
echo !result! 
goto :eof 

:FirstUp 
setlocal EnableDelayedExpansion 
set "temp=%~2" 
set "helper=##AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ" 
set "first=!helper:*%temp:~0,1%=!" 
set "first=!first:~0,1!" 
if "!first!"=="#" set "first=!temp:~0,1!" 
set "temp=!first!!temp:~1!" 
(
    endlocal 
    set "result=%temp%" 
    goto :eof 
) 

La fonction: FirstUp utiliser l'astuce de la recherche du premier caractère dans la chaîne d'aide avec le% var: * x =% syntaxe. Cela supprime tous les caractères avant la première occurrence (donc je double tous les caractères) Donc, en premier vous avez obtenu le mot "vox", "VWWXXYYZZ", alors je prends simplement le premier caractère de% first% pour obtenir la capitale et ajouter le reste de la chaîne d'origine sans après le premier caractère.

+0

C'est une façon élégante de le faire. La correspondance de chaînes étant insensible à la casse pourrait être un choc pour certaines personnes qui s'attendaient à voir l'assistant = ## aAbBcC etc., mais cela fonctionne très bien. –

0

Personnellement, je réécris comme un python ou vbscript:

Code concept rapide/vbscript brut, pas particulièrement efficace, mais lecture en mesure, espérons:

Function MakeDirectories (strRootFolder, strParentFolder, strArrayFolderNames) 

    on error resume next 
    err.clear 

    Set objFSO = CreateObject("Scripting.FileSystemObject") 

    strParentFolder = strRootFolder & "\" & strParentFolder 

    if not objFSO.FolderExists(strParentFolder) then 
     objFSO.CreateFolder(strParentFolder) 
    end if 

    if err.number then 
     MakeDirectories = false  
     exit function 
    end if 

    dim strNewFolder 

    for each strfolderName in strArrayFolderNames 
     strNewFolder = strParentFolder & "\" & ProperNames(strFolderName) 
     if not objFSO.FolderExists(strNewFolder) then 
      objFSO.CreateFolder(strNewFolder) 
     end if 
    next 

    if err.number then 
     MakeDirectories = false  
    else  
     MakeDirectories = True 
    end if 

End function 

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 

function Proper (strText) 

    Proper = ucase(left(strText,1)) & lcase(mid(strText,2)) 

end function  

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 

Function ProperNames (strText) 

    if instr(strText," ") > 0 then 
     dim temp, i 
     temp = split(strText, " ") 
     for i = lbound(temp) to ubound(temp) 
      temp(i) = Proper(temp(i)) 
     next  
     ProperNames = join(temp, " ") 
    else 
     ProperNames = Proper(strText) 
    end if  

End Function  

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 

Sub Main () 

    dim strLastName, strFirstName 

    strLastName = InputBox("Please enter the client's last name:") 
    if strLastName = "" then exit sub 

    strFirstName = InputBox("Please enter the client's first name:") 
    if strLastName = "" then exit sub 

    '' a better alternative might be to put the desired folder 
    '' into a text file and have the program read said data 
    dim strArrayFolderNames(9) 
    strArrayFolderNames(0) = "Budget" 
    strArrayFolderNames(1) = "Business Registration" 
    strArrayFolderNames(2) = "Correspondence" 
    strArrayFolderNames(3) = "Financial Info" 
    strArrayFolderNames(4) = "Forms" 
    strArrayFolderNames(5) = "Illustrations" 
    strArrayFolderNames(6) = "Loans & Investments" 
    strArrayFolderNames(7) = "Personal Info" 
    strArrayFolderNames(8) = "Recommendations" 
    strArrayFolderNames(9) = "Tax Misc" 

    dim strDelimeter, strRootFolder, strParentFolder 

    strDelimeter  = "-" '' I suggest avoiding the use of "," 
    strRootFolder = "C:\docs\temp" 
    strParentFolder = Proper(strLastName) & strDelimeter & Proper(strFirstName) 

    If MakeDirectories(strRootFolder, strParentFolder, strArrayFolderNames) then 
     wscript.echo ("Folders all made.") 
    else 
     wscript.echo ("Error: one or more folders was not created.") 
    end if 

End Sub 

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 

Main() 

Enfin, je vous suggère don 't utiliser des virgules dans les noms de dossier, il vous fera économiser la peine d'admin sur la route.

Michael.

Questions connexes