Effettuare la prima lettera di inserire un capitale di utente in uno script batch
-
29-09-2019 - |
Domanda
Questo è lo script batch che utilizzo per fare le cartelle per un nuovo cliente:
@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
Voglio essere in grado di aggiungere la possibilità di automaticamente maiuscola la prima lettera di ogni parola.
Ho trovato un modo per farlo sostituendo ogni lettera con uno spazio di fronte ad essa con il suo capitale, che sembra qualcosa di simile:
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%%"
Ma questo non capitalizza la prima parola ...
Tutte le idee?
Soluzione
O con lotti di puro ...
@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 funzione: FirstUp usa il trucco di cercare il primo carattere della stringa soccorritore presso il var%:. * X = sintassi%
Questo rimuove tutti i caratteri prima della prima occorrenza (quindi faccio doppio tutti i caratteri) Così, in prima avete ottenuto per la parola "VOX", "VWWXXYYZZ", quindi ho semplicemente prendo il primo carattere del% primo% per ottenere la capitale e aggiungere il resto della stringa originale senza dopo il primo carattere.
Altri suggerimenti
Personalmente mi piacerebbe riscrivere come un pitone o VBScript:
Breve / vbscript greggio codice di concetto, non particolarmente efficiente, ma si spera di lettura in grado di:
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 ()
Infine, vi consiglio di non Utilizzare le virgole nei nomi delle cartelle, che vi farà risparmiare il dolore di amministrazione in fondo alla strada.
Michael.