Faire la première lettre du capital une entrée utilisateur dans un script batch
-
29-09-2019 - |
Question
Ceci est le script batch j'utilise pour faire les dossiers pour un nouveau client:
@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 en majuscule la première lettre de chaque mot.
J'ai trouvé une façon 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 ...
Toutes les idées?
La solution
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) Ainsi, d'abord, vous avez le mot « vox », « VWWXXYYZZ », alors je prends simplement le premier caractère de% premier% pour obtenir le capital et ajouter le reste de la chaîne d'origine sans après le premier caractère.
Autres conseils
Personnellement, je récrire comme un python ou vbscript:
rapide / brut code concept vbscript, pas particulièrement efficace, mais nous espérons lecture en mesure:
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 de ne pas virgules dans les noms de dossier, il vous sauveront la douleur admin sur la route.
Michael.