elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Personalizar Batch
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 3 [4] Ir Abajo Respuesta Imprimir
Autor Tema: Personalizar Batch  (Leído 13,012 veces)
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.700



Ver Perfil
Re: Personalizar Batch
« Respuesta #30 en: 23 Septiembre 2013, 15:07 pm »

Citar
Código
  1. Set "FullPath=%CD%\%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%%WordCaseName%"

Reemplaza el comando "Set" por "Echo" y mira lo que pasa.

Usa esa técnica para encontrar problemas relacionados con variables (en otros códigos me refiero).

Solución: Set "FullPath=%CD%%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%%WordCaseName%"


Citar
Citar
Código:
IF /?
esto no lo entiendo

Todos los comandos tienen una sección de ayuda a la que se accede con el switch "/?", escribe en la consola:
Código:
IF /?


Saludos


En línea


Pédrin-2

Desconectado Desconectado

Mensajes: 171



Ver Perfil
Re: Personalizar Batch
« Respuesta #31 en: 23 Septiembre 2013, 19:26 pm »

 :-[
Sigo idem
Código:
Reemplaza el comando "Set" por "Echo" y mira lo que pasa.
No pasa nada

Citar
Solución: Set "FullPath=%CD%%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%%WordCaseName%"
aunque la unica diferencia con:
Código:
            Set "FullPath=%CD%\%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%%WordCaseName%"
es la " \ ", hace lo mismo.

Estoy perdido

Un saludo


En línea

Pido disculpas por las pifias que pueda decir. el unico fin es ayudar y aprender.
        Un Saludo
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.700



Ver Perfil
Re: Personalizar Batch
« Respuesta #32 en: 23 Septiembre 2013, 19:48 pm »

la unica diferencia con:
Código:
            Set "FullPath=%CD%\%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%%WordCaseName%"
es la " \ ", hace lo mismo.

Si exacto esa era la solución, eliminar el caracter del backslash "\".

El code funciona eliminando dicho caracter.

Ejecutas el script, indicas un nombre de carpeta, y la carpeta se crea en el directorio desde donde has ejecutado el script, y por último se abre la carpeta usando el FileExplorer,
si no es ese el funcionamiento que buscas o si es ese pero tienes algún tipo de problema pues creo que va siendo hora de que escribas un comentario DETALLADO mostrando el script tal y como lo tienes, explicando la manera en como estás usando el script y los valores que le das a las variables, en fín información de los pasos a seguir para reproducir el problema que tienes o darte una solución, porque asi no nos entendemos ni uno ni el otro, ya que el code funciona si se usa como se debe usar.

saludos!
En línea


Pédrin-2

Desconectado Desconectado

Mensajes: 171



Ver Perfil
Re: Personalizar Batch
« Respuesta #33 en: 23 Septiembre 2013, 21:58 pm »

Con este batch:

Código:
@Echo OFF & Setlocal EnableDelayedExpansion
 
Set /P "Name=Nombre de Cliente:"
Call :ToWordCase "%Name%"
 
Set "FullPath=%CD%\%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%%WordCaseName%"
REM Set "FullPath=%CD%%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%%WordCaseName%"
 
MKDIR "%FullPath%" && (Explorer "%FullPath%")
 
rem Pause&Exit
 
 :ToWordCase
Set "Alphabet=ABCDEFGHIJKLMNOPQRSTUVWXYZ"
For %%# in (%~1) do (
Set "Word=%%#"
Set "Char=!Word:~0,1!"
If /I "!Char!" EQU "a" (Set "X=%Alphabet:~0,1%")
If /I "!Char!" EQU "b" (Set "X=%Alphabet:~1,1%")
If /I "!Char!" EQU "c" (Set "X=%Alphabet:~2,1%")
If /I "!Char!" EQU "d" (Set "X=%Alphabet:~3,1%")
If /I "!Char!" EQU "e" (Set "X=%Alphabet:~4,1%")
If /I "!Char!" EQU "f" (Set "X=%Alphabet:~5,1%")
If /I "!Char!" EQU "g" (Set "X=%Alphabet:~6,1%")
If /I "!Char!" EQU "h" (Set "X=%Alphabet:~7,1%")
If /I "!Char!" EQU "i" (Set "X=%Alphabet:~8,1%")
If /I "!Char!" EQU "j" (Set "X=%Alphabet:~9,1%")
If /I "!Char!" EQU "k" (Set "X=%Alphabet:~10,1%")
If /I "!Char!" EQU "l" (Set "X=%Alphabet:~11,1%")
If /I "!Char!" EQU "m" (Set "X=%Alphabet:~12,1%")
If /I "!Char!" EQU "n" (Set "X=%Alphabet:~13,1%")
If /I "!Char!" EQU "o" (Set "X=%Alphabet:~14,1%")
If /I "!Char!" EQU "p" (Set "X=%Alphabet:~15,1%")
If /I "!Char!" EQU "q" (Set "X=%Alphabet:~16,1%")
If /I "!Char!" EQU "r" (Set "X=%Alphabet:~17,1%")
If /I "!Char!" EQU "s" (Set "X=%Alphabet:~18,1%")
If /I "!Char!" EQU "t" (Set "X=%Alphabet:~19,1%")
If /I "!Char!" EQU "u" (Set "X=%Alphabet:~20,1%")
If /I "!Char!" EQU "v" (Set "X=%Alphabet:~21,1%")
If /I "!Char!" EQU "w" (Set "X=%Alphabet:~22,1%")
If /I "!Char!" EQU "x" (Set "X=%Alphabet:~23,1%")
If /I "!Char!" EQU "y" (Set "X=%Alphabet:~24,1%")
    If /I "!Char!" EQU "z" (Set "X=%Alphabet:~25,1%")
Set "WordCaseName=!WordCaseName! !X!!Word:~1!"
)

Lo hago funcionar asi:

Teclado en minusculas, click en el archivo bat, escribes; pedro y se crea una carpeta con esta estructura: 2013-09-23 Pedro
hasta aqui esta perfecto.
Teclado con mayusculas, click en el archivo bat, escribes; PEDRO y se crea una carpeta con esta estructura: 2013-09-23 PEDRO.
Y es aqui donde esta el fallo tendria que salir Pedro.

Yo creia que ya lo habias entendido,
Código:
Creo que ahora entiendo tus intenciones.

¿Quieres que la carpeta "Cliente" se cree en el mismo directorio desde donde abres el script , no?


perdona si no me he expresado bien

Un saludo
En línea

Pido disculpas por las pifias que pueda decir. el unico fin es ayudar y aprender.
        Un Saludo
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.700



Ver Perfil
Re: Personalizar Batch
« Respuesta #34 en: 23 Septiembre 2013, 23:18 pm »

Yo creia que ya lo habias entendido, Creo que ahora entiendo tus intenciones.

yo también lo creí, pero si corrijo una parte y me dices "sigue igual", yo no sé a que parte del código te estás refiriendo como comprenderás.

Entonces la parte importante funciona, solo que quieres perfeccionar el método del TitleCase (o ProperCase) para que trabaje todo tipo de variantes de strings, ok

Lo que debes hacer antes de trabajar el string es convertirlo a lowercase, es decir, todo a letras minúsculas, y así solo tendrás que convertir la primera letra del string a mayúscula.

Lo siento pero no voy a seguir ayudándote a hacerlo en Batch, ya que es una tarea horrible y una pérdida de tiempo por la cantidad de código adicional que requieren este tipo de funciones en Batch,
el resultado es un código  ¡¡ tan sucio !!, pero no te confundas, yo amo Batch porque es lo primero que aprendí, solo es que no me apetece perder el tiempo cuando puedo hacer lo mismo en otros lenguajes con mayor precisión, de manera más simplificada y con mejor legibilidad de la estructura del código.

...Y no he dicho que no te vaya a ayudar a hacer la tarea en otro lenguaje! :)

Te voy a codear la tarea en vbs para que aprecies la diferencia entre la incapacidad de Batch y la virtuosidad de los demás lenguajes (y también porque ya estoy un poco hasta las pe...zuñas de las 3 páginas de este hilo xD), aquí tienes pero no te acostumbres!:

Código
  1. ' ClientFolderOfDay Script, por .:: Elektro H@cker ::. ...Para los usuarios de ElHacker.Net
  2.  
  3. Set Shell = WScript.CreateObject ("WScript.Shell")
  4.  
  5. Do Until Not FolderName=""
  6.    FolderName = StringToTitleCase( _
  7.                 InputBox ("Escribe el nombre de la carpeta o cliente:", _
  8.                           "ClientFolderOfDay by .:: Elektro H@cker ::."))
  9. Loop
  10.  
  11. FullPath = Shell.CurrentDirectory & "\" & _
  12.           (Year(Date) & "-" & DateDigitLen(Month(Date)) & "-" & DateDigitLen(Day(Date))) & _
  13.            " " & FolderName
  14.  
  15. CreateObject("Scripting.FileSystemObject").CreateFolder FullPath
  16. Shell.run "Explorer.exe """ & FullPath & """", 1, False
  17. Wscript.Quit(0)
  18.  
  19. ' Funcs:
  20. Function StringToTitleCase(str)
  21.    StringToTitleCase=UCase(Left(str,1)) & LCase(Right(str,Len(str)-1))
  22. End Function
  23.  
  24. Function DateDigitLen(PortionOfDate)
  25.    If(Len(PortionOfDate)=1) Then
  26.       DateDigitLen="0" & PortionOfDate
  27.    Else
  28.       DateDigitLen=PortionOfDate
  29.    End If
  30. End function


PD1: Guarda el script con extensión "VBS" y ejecútalo de la misma manera como si se tratase de un archivo Bat.

PD2: Si piensas llamar al script desde el registro entonces en el valor de la clave "command" que generes debes agregar los siguientes datos:
Código:
"Wscript.exe "Folderclient.vbs""


Saludos
« Última modificación: 23 Septiembre 2013, 23:48 pm por EleKtro H@cker » En línea


Pédrin-2

Desconectado Desconectado

Mensajes: 171



Ver Perfil
Re: Personalizar Batch
« Respuesta #35 en: 24 Septiembre 2013, 11:30 am »

Hola EleKtro H@cker
De verdad que lamento muchisimo tu malestar sobre mi post.

Nunca quise que te sintieras tan molesto conmigo, el gran problema que tenemos las personas es que cuando sabemos en un tema, nos creemos que los demas estan a nuestra altura, y cuando un asunto sale mal por la ley de Murphy en la mayortia de los casos va a peor.

Te recuerdo que soy como un niño que se le esta enseñando a caminar, por lo tanto mis conocimientos son muy, muy, muy basicos.

Sobre el tema de si lo haces en un lenguaje o en otro me da igual, el hecho de hacerlo en batch, es porque una persona muy amble como tu, quiso perder su tiempo para ayudarme, y me proporciono el batch, y hasta la fecha no se me ha ocurrido mejorarlo, por eso despues de muchos intentos y busquedas por google no lo he podido solucionar y he tenido que recurrir a este foro.

Si crees conveniente lo dejamos aqui, y sigo con el codigo hasta la parte que funciona y ya me ire fijando de no escribir en mayusculas.

o corriges este ultimo en un nombre compuesto la segunda palabra no se pone en mayusculas: ( Pedro juan, en vez de Pedro Juan )

De hecho me gusta mas tu input box, que esa ventana cmd

Lo dicho, si lo corriges bien sino se acaba el .... hilo.

Un saludo.

PD espero que no te haya sentado mal mi opinion
En línea

Pido disculpas por las pifias que pueda decir. el unico fin es ayudar y aprender.
        Un Saludo
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.700



Ver Perfil
Re: Personalizar Batch
« Respuesta #36 en: 24 Septiembre 2013, 12:04 pm »

@Pedrin-2

No me hagas sentir mal, si digo que estoy un poco harto del tema es en plan broma para no crear tensiones, porque veo 3 páginas con scripts para intentar arreglar un único problema y me descojo..., no te pongas tenso tú ahora xD, a mi me gusta ayudar a quien quiere aprender un poco y es por una de las razones que modero varios foros, no te preocupes por eso que no cierro temas sin tener un buen motivo ni tampoco me ha molestado tu comentario.

o corriges este ultimo en un nombre compuesto la segunda palabra no se pone en mayusculas: ( Pedro juan, en vez de Pedro Juan )

En principio no es un error, si te fijas la función se llama TitleCase, no WordCase, ya que no tuve en cuenta que querías poner en mayúscul la letra principal de TODAS las palabras (quizás es obvio tratándose de "nombres de clientes", pero si no me lo especificas  pues tampoco lo hago de esa manera).

Tiene facil arreglo:

Reemplazas la función StringToTitleCase por esta otra:

Código
  1.    Function StringToWordCase(str)
  2.       For each word in Split(str)
  3.          StringToWordCase=StringToWordCase & _
  4.                           " " & UCase(Left(word,1)) & LCase(Right(word,Len(word)-1))
  5.       Next
  6.    End Function

Y llamas a la función en esta otra linea:
Citar
Código
  1. FolderName = StringToWordCase( ...

¿Solucionado por fín? xD

Saludos
« Última modificación: 24 Septiembre 2013, 12:10 pm por EleKtro H@cker » En línea


Pédrin-2

Desconectado Desconectado

Mensajes: 171



Ver Perfil
Re: Personalizar Batch
« Respuesta #37 en: 24 Septiembre 2013, 17:27 pm »

Si por fin ya esta solucionado,  ;-)

Te puedo comentar algo para mejorarlo,  >:D  he visto algo, que no es un fallo pero le faltaria ese detalle.

Sigues animado??

Pd
Ya que me recomiendas un editor que no sea de pago,

Un saludo
« Última modificación: 24 Septiembre 2013, 17:45 pm por EleKtro H@cker » En línea

Pido disculpas por las pifias que pueda decir. el unico fin es ayudar y aprender.
        Un Saludo
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.700



Ver Perfil
Re: Personalizar Batch
« Respuesta #38 en: 24 Septiembre 2013, 17:45 pm »

¿A que te refieres?, si lo dices por el búcle del inputbox, no se puede mejorar mucho más ya que solamente retorna el string, si quieres que al cancelar el input no vuelva a salir, pues elimina el búcle xD.

Como editor de texto te recomiendo Sublime Text 3, si vas a trabajar VBS primero debes instalarte uno de los varios plugins de vbs que puedes encontrar en el foro de la web del programa.

Saludos!
En línea


Pédrin-2

Desconectado Desconectado

Mensajes: 171



Ver Perfil
Re: Personalizar Batch
« Respuesta #39 en: 24 Septiembre 2013, 19:02 pm »

Veo que sabes por donde van las preguntas.

Te lo explico a mi manera:
Si ejecuto el script y quiero; cancelar, aceptar sin poner nada, o cerrar es imposible que se cierre, tan solo se cierra cuando se ecribe, creo que esta opcion ya la habias barajado.

Si es asi, y me dices que quite el bucle, entiendo como bucle ( loop ), si lo quito junto a su  ( Do Until Not ), pasa lo siguiente:

En una carpeta vacia, solo script, ejecuto script, se abre inputbox, si le doy a cerrar se cierra pero se abre un carpeta con la fecha de hoy.
y apartir de aqui ya no se puede hacer nada da error ( el archivo ya existe ), si borras la carpeta te deja , cerra, aceptar en blanco, o cancelar, pero siempre te crea la carpeta con la fecha actual.

Te pediria por favor, ya que doy por hecho, que sabes la respuesta, me pegaras todo el codigo .vbs, para asi no estar como hemos estado paginas atras.

Y por favor compruebalo, y asi seguro que lo que escribas sera el definitivo, y el tema lo damos por terminado.

Un saludo

PD
Espero haberme explicado bien


En línea

Pido disculpas por las pifias que pueda decir. el unico fin es ayudar y aprender.
        Un Saludo
Páginas: 1 2 3 [4] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Personalizar aplicacion
Programación Visual Basic
bautistasbr 3 840 Último mensaje 30 Agosto 2006, 21:38 pm
por NYlOn
Personalizar error
Programación Visual Basic
dimitrix 1 826 Último mensaje 22 Enero 2007, 01:18 am
por Syphroot
personalizar datagrid vb6.0
Programación Visual Basic
choquito 2 6,277 Último mensaje 2 Abril 2007, 17:41 pm
por choquito
Personalizar DVD
Multimedia
Sri 0 1,263 Último mensaje 23 Diciembre 2007, 19:19 pm
por Sri
[Batch] Insertar un batch dentro de un batch que fabrique un .txt
Scripting
$pedrojo2704 2 4,129 Último mensaje 23 Agosto 2012, 10:08 am
por $pedrojo2704
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines