Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Pédrin-2 en 16 Septiembre 2013, 19:02 pm



Título: Personalizar Batch
Publicado por: Pédrin-2 en 16 Septiembre 2013, 19:02 pm
Hola de nuevo.
Desde hace mucho tiempo un buen conocedor del tema me hizo un batch, creo que era Martin MVP.
Me ha funcionado ciento por ciento.
y ahora me gustaria tunearlo, de momento, el cambio que he hecho, es que le pueda agregar ademas de la fecha ,el nombre que quiera, y tambien que esa misma carpeta se abra.
Pues el tema es que la carpeta se crea y cuando quiere se abre y cuando quiere no se abre, "muy contento estaba yo al ver que funcionaba".
Porfi me echais un cable donde me atasque,

El codigo:
Código:
@echo off
set/p nombre="Nombre:"
set nombre=%nombre%
set guion=-
for /f "tokens=1,2,3,4 delims=/" %%i in ('date /t') do (
set ano=%%k
set dia=%%i
set mes=%%j
set nombre=%nombre%)
set cadena=%ano%%guion%%mes%%guion%%dia% %nombre%
set directorio=%1


start cmd.exe /c "CD %directorio% && Md """%cadena%""""

START EXPLORER %cadena%


Título: Re: Personalizar Batch
Publicado por: Eleкtro en 16 Septiembre 2013, 20:05 pm
No me ha quedado muy claro si quieres pasarle el nombre del directorio usando argumentos (%1) o preguntando al usuario, en total intentas setear 3 variables, nombre, directorio, y cadena, si no nos cuentas lo que debe haber en cad auna de ellas...
Por lo que yo entiendo quieres pasarle un directorio por argumentos, y leugo especificar un nomrbe de carpeta manuálmente para ese directorio.

...Símplemente te sugiero como corregir tu script, lo de las variables ya lo ajustas tu:

Código
  1. @echo off
  2.  
  3. :: Aquí las comillas dobles siempre encerrando tanto el nombre de la variable como el valor,
  4. :: nunca encierres el valor con comillas, nunca.
  5. Set /P "nombre=Nombre:"
  6.  
  7. :: 1. Esto sobra complétamente, arriba ya declaras una variable que se llama "nombre" y que contiene el valor que quieres
  8. :: 2.Además aquí te faltó usar comillas dobles para evitar errores si el valor contuviese espacios.
  9. REM set Nombre=%nombre%
  10.  
  11. :: Esto diréctamente en mi opinión sobra,
  12. :: no cuesta nada escribir el símbolo del guión.
  13. :: Esta variable consigue que el código de abajo sea menos legible.
  14. REM set guion=-
  15.  
  16. :: Esta parte se puede simplificar sin la necesidad de establecer nuevas variables
  17. REM for /f "tokens=1,2,3,4 delims=/" %%i in ('date /t') do (
  18. REM set ano=%%k
  19. REM set dia=%%i
  20. REM set mes=%%j
  21. REM set nombre=%nombre%)
  22. :: Pero si prefieres almacenar los valores en nuevas variables puedes hacerlo así
  23. Set "YYYY=%DATE:~6,4%" & Set "DD=%DATE:~0,2%" & Set "MM=%DATE:~3,2%"
  24.  
  25. :: Aquí te faltó usar comillas dobles para encerrar el valor.
  26. set "cadena=%YYYY%-%MM%-%DD% %nombre%"
  27.  
  28. :: El parámetro especial %1 contiene comillas dobles al principio y al final,
  29. :: así que estás encerrando el valor como comenté que no habia que hacerlo nunca.
  30. set "Directorio=%~1"
  31.  
  32. :: 1. Le falta comillas dobles al argumento de la variable "%Directorio%""
  33. :: 2. La variable %cadena% tiene demasiadas comillas dobles que entran en conflicto con el argumento encerrado de la CMD.
  34. REM start cmd.exe /c "CD %directorio% && Md """%cadena%""""
  35.  
  36. :: Crea la carpeta diréctamente sin acceder al directorio.
  37. MKDir "%directorio%\%cadena%"
  38.  
  39. Explorer /select,"%directorio%\%cadena%"
  40. :: NOTA: Fíjate en la barra invertida entre las dos variables,
  41. ::       asgúrate de setear el valor de la variable %directorio% sin esa barra al final del nombre.
  42.  
  43. :: Saludos :)
  44. Pause&Exit



EDITO:

La versión corta:

Código
  1. @echo off
  2.  
  3. Set /P "nombre=Nombre:"
  4. Set "YYYY=%DATE:~6,4%" & Set "DD=%DATE:~0,2%" & Set "MM=%DATE:~3,2%"
  5. set "cadena=%YYYY%-%MM%-%DD% %nombre%"
  6. set "Directorio=%~1"
  7.  
  8. MKDir "%directorio%\%cadena%"
  9. Explorer /select,"%directorio%\%cadena%"
  10.  
  11. Pause&Exit

Saludos


Título: Re: Personalizar Batch
Publicado por: Pédrin-2 en 16 Septiembre 2013, 20:27 pm
Jo perdona mucho corria sin dar explicaciones.
El batch tiene que crear una carpeta, con la fecha en la que es creada, pero ademas se tiene que poner otro nombre, ejemplo:  2013 -09-16 Pablo

y por ultimo la carpeta recien creada se tiene que abrir {en el mismo sitio donde esta el batch, (o que yo le indique la ruta donde quiro que se abra) }


Un saludo y Gracias


Título: Re: Personalizar Batch
Publicado por: Pédrin-2 en 16 Septiembre 2013, 22:46 pm
Hola  EleKtro H@cker, por mas vueltas que le doy no consigo nada con tu codigo.
El codigo original antes de yo transformalo era asi:

Código:
echo off
set guion=-
for /f "tokens=1,2,3 delims=/" %%i in ('date /t') do (
set ano=%%k
set dia=%%i
set mes=%%j)
set cadena=%ano%%guion%%mes%%guion%%dia%
set directorio=%1
start cmd.exe /c "CD %directorio% && Md """%cadena%""""

y yo lo dejo como ya puse antes:

Código:
@echo off
set/p nombre="Nombre:"
set nombre=%nombre%
set guion=-
for /f "tokens=1,2,3,4 delims=/" %%i in ('date /t') do (
set ano=%%k
set dia=%%i
set mes=%%j
set nombre=%nombre%)
set cadena=%ano%%guion%%mes%%guion%%dia% %nombre%
set directorio=%1


start cmd.exe /c "CD %directorio% && Md """%cadena%""""

START EXPLORER %cadena%

y el unico problema que hay, " por el tema de codigo ignoro que este bien, pero funciona"     es que unas veces abre la carpeta y la mayoria de las veces abre la carpeta de mis documentos.


Título: Re: Personalizar Batch
Publicado por: Eleкtro en 17 Septiembre 2013, 05:08 am
@Pedrín-2

Porfavor vuelve a leer los comentarios que te dejé escritos en el script,
Te comenté cual es el problema exacto aquí:

Código:
START EXPLORER %cadena%

La variable, es decir, el argumento de la ruta de acceso, debes encerrarlo usando comillas dobles:

Código
  1. Explorer.exe /select,"%cadena%"





Supongamos que el valor de la variable cadena es este:
Código
  1. Set "Cadena=C:\Carpeta con espacios"

Entonces si tu haces esto:
Código
  1. Explorer.exe %Cadena%
(Que es lo mismo que hacer esto:)
Código
  1. Explorer.exe C:\Carpeta con espacios

Estás pasándole 3 argumentos al proceso:
Código:
1. C:\Carpeta
2. con
3. espacios

Como el explorer.exe no puede encontrar el directorio especificado (Primer argumento: "C:\Carpeta") entonces por defecto te redirige a la localización de "mis documentos".

Pero si tu haces esto otro:
Código
  1. Explorer.exe "%cadena%"
(Que es lo mismo que hacer esto:)
Código
  1. Explorer.exe "C:\Carpeta con espacios"

Ahora le estás pasando un único argumento y te va a abrir la localizión del directorio especificado (siempre que el directorio exista):
Código:
C:\Carpeta con espacios



NOTA: Lo de las comillas dobles debes aplicarlo a "TODO".



un saludo


Título: Re: Personalizar Batch
Publicado por: Pédrin-2 en 17 Septiembre 2013, 11:50 am
Un millon de gracias EleKtro H@cker.
De momento va bien, y digo de momento porque no se que carajo pasa que a veces falla.
Siguo investigando para poder mejorarlo, pronto me tienes con mas dudas.

Un saludo    ;-)


Título: Re: Personalizar Batch
Publicado por: Pédrin-2 en 17 Septiembre 2013, 22:32 pm
Hola EleKtro H@cker
Porque me esta dando errores el Batch.
A veces, cuando pongo el nombre, por ejemplo Juan, me abre la carpeta de mis documentos, la cierro y ejecuto de nuevo, poniendo el mismo nombre y es a la segunda cuando funciona.

Al batch se puede añadir:
1º  si hay otra carpeta con el mismo nombre que se le vaya sumando por ejemplo: 2013 -08-12 Juan-1, 2013 -08-12 Juan-2, 2013 -08-12 Juan-3 etc, se que en action script se puede hacer, aqui ya me pierdo, no se como adaptarlo.

2º que todas las palabras comiencen por mayusculas: 2013 -08-12 Juan Manuel. se que en excel se hace

Demasiado estoy pidiendo, pero para hacerlo yo, me esta costando un mundo, estoy dando palos de ciego.

Disculpa por el morro
Un saludo


Título: Re: Personalizar Batch
Publicado por: Eleкtro en 17 Septiembre 2013, 23:52 pm
A veces, cuando pongo el nombre, por ejemplo Juan, me abre la carpeta de mis documentos, la cierro y ejecuto de nuevo, poniendo el mismo nombre y es a la segunda cuando funciona.

Si eso es así entonces puede que estés creando la carpeta después de llamar al explorer y no antes?

Lo de incrementar el sufijo del nombre de la carpeta, sólamente tienes que hacer un substring, es muy sencillo: http://ss64.com/nt/syntax-substring.html

hoy no tengo mas tiempo, si no se me adelanta algún compañero mañana te muestro lo de poner las letras en WordCase, que eso requiere un poco más de elaboración.

Saludos


Título: Re: Personalizar Batch
Publicado por: Pédrin-2 en 18 Septiembre 2013, 00:21 am

Si eso es así entonces puede que estés creando la carpeta después de llamar al explorer y no antes?


Plis y como se hace


Lo de incrementar el sufijo del nombre de la carpeta, sólamente tienes que hacer un substring, es muy sencillo: http://ss64.com/nt/syntax-substring.html


Bien, eso es lo que andaba buscando, pasos a seguir para ir practicando, no ir dando palos de ciego.

Habia yo, pensado que  tendria que haber algun un programa para traducir la sentencia , estilo google translate, ejem:

elige lenguaje: Visual basic, java, batch, etc...
escribe lo que quieres: como poner todas las palabras en minuscula en las columnas 19 y 20.
.......pensando
Respuesta a lenguaje Visual basic:  If Target.Column = 19 Or Target.Column = 20 Then Target = LCase(Target)

Je, Je, y de paso que nos diga los numeros de la loteria.

Un saludo y Buenas Noches si estas en Spain


Título: Re: Personalizar Batch
Publicado por: Eleкtro en 18 Septiembre 2013, 12:39 pm
Código
  1. @Echo OFF
  2. Setlocal EnableDelayedExpansion
  3.  
  4. Call :ToWordCase "hello world"
  5.  
  6. Pause&Exit
  7.  
  8. :ToWordCase
  9. Set "Alphabet=ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  10.  
  11. For %%# in (%~1) do (
  12. Set "Word=%%#"
  13. Set "Char=!Word:~0,1!"
  14. If "!Char!" EQU "a" (Set "X=%Alphabet:~0,1%")
  15. If "!Char!" EQU "b" (Set "X=%Alphabet:~1,1%")
  16. If "!Char!" EQU "c" (Set "X=%Alphabet:~2,1%")
  17. If "!Char!" EQU "d" (Set "X=%Alphabet:~3,1%")
  18. If "!Char!" EQU "e" (Set "X=%Alphabet:~4,1%")
  19. If "!Char!" EQU "f" (Set "X=%Alphabet:~5,1%")
  20. If "!Char!" EQU "g" (Set "X=%Alphabet:~6,1%")
  21. If "!Char!" EQU "h" (Set "X=%Alphabet:~7,1%")
  22. If "!Char!" EQU "i" (Set "X=%Alphabet:~8,1%")
  23. If "!Char!" EQU "j" (Set "X=%Alphabet:~9,1%")
  24. If "!Char!" EQU "k" (Set "X=%Alphabet:~10,1%")
  25. If "!Char!" EQU "l" (Set "X=%Alphabet:~11,1%")
  26. If "!Char!" EQU "m" (Set "X=%Alphabet:~12,1%")
  27. If "!Char!" EQU "n" (Set "X=%Alphabet:~13,1%")
  28. If "!Char!" EQU "o" (Set "X=%Alphabet:~14,1%")
  29. If "!Char!" EQU "p" (Set "X=%Alphabet:~15,1%")
  30. If "!Char!" EQU "q" (Set "X=%Alphabet:~16,1%")
  31. If "!Char!" EQU "r" (Set "X=%Alphabet:~17,1%")
  32. If "!Char!" EQU "s" (Set "X=%Alphabet:~18,1%")
  33. If "!Char!" EQU "t" (Set "X=%Alphabet:~19,1%")
  34. If "!Char!" EQU "u" (Set "X=%Alphabet:~20,1%")
  35. If "!Char!" EQU "v" (Set "X=%Alphabet:~21,1%")
  36. If "!Char!" EQU "w" (Set "X=%Alphabet:~22,1%")
  37. If "!Char!" EQU "x" (Set "X=%Alphabet:~23,1%")
  38. If "!Char!" EQU "y" (Set "X=%Alphabet:~24,1%")
  39. If "!Char!" EQU "z" (Set "X=%Alphabet:~25,1%")
  40. < Nul Call Set /P "=!X!!Word:~1! "
  41. )
  42.  
  43. GOTO:EOF

Así lo hice en Batch,
saludos!


Título: Re: Personalizar Batch
Publicado por: Pédrin-2 en 19 Septiembre 2013, 00:42 am
Hola EleKtro H@cker.
lamento que te tenga que molestar tanto, no se que vas ha hacer conmigo, estoy saturado de hacer pruebas y no consigo nada.
no consigo que lo que sale en pantalla ( los nombres con la primera letra en mayuscula se copien en la carpeta ) he probado de todo.
Me he atascado con esto y no puedo mas
te pongo el codigo a ver que se puede hacer:

Código:
@Echo OFF
set/p nombre="Nombre de Cliente:"
set nombre=%nombre%

set guion=-
for /f "tokens=1,2,3,4,5 delims=/" %%i in ('date /t') do (
set ano=%%k
set dia=%%i
set mes=%%j
Set ToWordCase=%Alphabet%
set nombre=%nombre%)
set cadena=%ano%%guion%%mes%%guion%%dia% %ToWordCase%%nombre%
set directorio=%1

rem copy "%:ToWordCase%" "%cadena%"
Setlocal EnableDelayedExpansion
 Call :ToWordCase "%nombre%"
 Echo+
Pause&Exit
 :ToWordCase
Set "Alphabet=ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 For %%# in (%~1) do (
Set "Word=%%#"
Set "Char=!Word:~0,1!"
If "!Char!" EQU "a" (Set "X=%Alphabet:~0,1%")
If "!Char!" EQU "b" (Set "X=%Alphabet:~1,1%")
If "!Char!" EQU "c" (Set "X=%Alphabet:~2,1%")
If "!Char!" EQU "d" (Set "X=%Alphabet:~3,1%")
If "!Char!" EQU "e" (Set "X=%Alphabet:~4,1%")
If "!Char!" EQU "f" (Set "X=%Alphabet:~5,1%")
If "!Char!" EQU "g" (Set "X=%Alphabet:~6,1%")
If "!Char!" EQU "h" (Set "X=%Alphabet:~7,1%")
If "!Char!" EQU "i" (Set "X=%Alphabet:~8,1%")
If "!Char!" EQU "j" (Set "X=%Alphabet:~9,1%")
If "!Char!" EQU "k" (Set "X=%Alphabet:~10,1%")
If "!Char!" EQU "l" (Set "X=%Alphabet:~11,1%")
If "!Char!" EQU "m" (Set "X=%Alphabet:~12,1%")
If "!Char!" EQU "n" (Set "X=%Alphabet:~13,1%")
If "!Char!" EQU "o" (Set "X=%Alphabet:~14,1%")
If "!Char!" EQU "p" (Set "X=%Alphabet:~15,1%")
If "!Char!" EQU "q" (Set "X=%Alphabet:~16,1%")
If "!Char!" EQU "r" (Set "X=%Alphabet:~17,1%")
If "!Char!" EQU "s" (Set "X=%Alphabet:~18,1%")
If "!Char!" EQU "t" (Set "X=%Alphabet:~19,1%")
If "!Char!" EQU "u" (Set "X=%Alphabet:~20,1%")
If "!Char!" EQU "v" (Set "X=%Alphabet:~21,1%")
If "!Char!" EQU "w" (Set "X=%Alphabet:~22,1%")
If "!Char!" EQU "x" (Set "X=%Alphabet:~23,1%")
If "!Char!" EQU "y" (Set "X=%Alphabet:~24,1%")
If "!Char!" EQU "z" (Set "X=%Alphabet:~25,1%")
< Nul Call Set /P "=!X!!Word:~1! "

)

start cmd.exe /c "CD %directorio% && Md """%cadena%""""





Por favor Paciencia con un novato

Un saludo


Título: Re: Personalizar Batch
Publicado por: Eleкtro en 19 Septiembre 2013, 01:13 am
Hombre pues claro... si copias el código sin más es obvio que no te va a funcionar, debes ajustarlo a tus necesidades.

Sin examinar detalládamente el code, para empezar el code que te puse no almacena el resultado en ninguna variable, imprime el output diréctamente.
Creo que no debería ser necesario una explicación sobre como deberías modificarlo, pero bueno:
Código:
Set "Words=!Words!!X!!Word:~1! "
(Dentro de la subrutina)

Citar
Código:
Set ToWordCase=%Alphabet%
Ahí no le estás asignando ningún valor, porque no hay ninguna variable que se llame "alphabet" fuera de la subrutina :ToWordCase.

Citar
Código:
set cadena=%ano%%guion%%mes%%guion%%dia% %ToWordCase%%nombre%
towordcase está vacia porque alphabet tambien está vacia.

Código:
Setlocal EnableDelayedExpansion
Esa orden deberías ponerla al principio del script junto al "@Echo OFF".

saludos


Título: Re: Personalizar Batch
Publicado por: Pédrin-2 en 19 Septiembre 2013, 01:29 am
Por favor no te enfades que tu este tema lo tienes mas que ....
Mañana pruebo lo que me comentas y te digo  ( espero que ya haya resuelto el problema).
Ya es muy tarde.

Un saludo y gracias por tu tiempo


Título: Re: Personalizar Batch
Publicado por: Pédrin-2 en 20 Septiembre 2013, 01:19 am
Me rindo
tiro la toalla
 :-[  >:D


Título: Re: Personalizar Batch
Publicado por: Eleкtro en 20 Septiembre 2013, 05:34 am
Me rindo
tiro la toalla
 :-[  >:D

no te rindas, muestra lo que llevas hecho


Título: Re: Personalizar Batch
Publicado por: Pédrin-2 en 20 Septiembre 2013, 11:14 am
Gracias por ayudarme

a parte de hacer pruebas, y buscar informacion de almacenar el resultado en variables
y no se como adptarlo a mi batch

Código:
@Echo OFF
 rem Esa orden deberías ponerla al principio del script junto al "@Echo OFF". ( en vez de junto la pongo debajo para que funcione )

Setlocal EnableDelayedExpansion
set/p nombre="Nombre de Cliente:"
set nombre=%nombre%

set guion=-
for /f "tokens=1,2,3,4,5 delims=/" %%i in ('date /t') do (
set ano=%%k
set dia=%%i
set mes=%%j
rem Set ToWordCase=%words%
Set ToWordCase=%Alphabet%
Set Alphabet=%Words%
set nombre=%nombre%

rem (Dentro de la subrutina)
Set "Words=!Words!!X!!Word:~1! ")    
rem set cadena=%ano%%guion%%mes%%guion%%dia% %ToWordCase%%nombre%
set cadena=%ano%%guion%%mes%%guion%%dia% %Alphabet%%nombre%
rem set cadena=%ano%%guion%%mes%%guion%%dia% %Words%%nombre%
set directorio=%1


 Call :ToWordCase "%nombre%"
 Echo+
rem Pause&Exit
 :ToWordCase
Set "Alphabet=ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 For %%# in (%~1) do (
Set "Word=%%#"
Set "Char=!Word:~0,1!"
If "!Char!" EQU "a" (Set "X=%Alphabet:~0,1%")
If "!Char!" EQU "b" (Set "X=%Alphabet:~1,1%")
If "!Char!" EQU "c" (Set "X=%Alphabet:~2,1%")
If "!Char!" EQU "d" (Set "X=%Alphabet:~3,1%")
If "!Char!" EQU "e" (Set "X=%Alphabet:~4,1%")
If "!Char!" EQU "f" (Set "X=%Alphabet:~5,1%")
If "!Char!" EQU "g" (Set "X=%Alphabet:~6,1%")
If "!Char!" EQU "h" (Set "X=%Alphabet:~7,1%")
If "!Char!" EQU "i" (Set "X=%Alphabet:~8,1%")
If "!Char!" EQU "j" (Set "X=%Alphabet:~9,1%")
If "!Char!" EQU "k" (Set "X=%Alphabet:~10,1%")
If "!Char!" EQU "l" (Set "X=%Alphabet:~11,1%")
If "!Char!" EQU "m" (Set "X=%Alphabet:~12,1%")
If "!Char!" EQU "n" (Set "X=%Alphabet:~13,1%")
If "!Char!" EQU "o" (Set "X=%Alphabet:~14,1%")
If "!Char!" EQU "p" (Set "X=%Alphabet:~15,1%")
If "!Char!" EQU "q" (Set "X=%Alphabet:~16,1%")
If "!Char!" EQU "r" (Set "X=%Alphabet:~17,1%")
If "!Char!" EQU "s" (Set "X=%Alphabet:~18,1%")
If "!Char!" EQU "t" (Set "X=%Alphabet:~19,1%")
If "!Char!" EQU "u" (Set "X=%Alphabet:~20,1%")
If "!Char!" EQU "v" (Set "X=%Alphabet:~21,1%")
If "!Char!" EQU "w" (Set "X=%Alphabet:~22,1%")
If "!Char!" EQU "x" (Set "X=%Alphabet:~23,1%")
If "!Char!" EQU "y" (Set "X=%Alphabet:~24,1%")
If "!Char!" EQU "z" (Set "X=%Alphabet:~25,1%")
< Nul Call Set /P "=!X!!Word:~1! "

)

start cmd.exe /c "CD %directorio% && Md """%cadena%""""


Un Saludo

PD  No te rias de lo malo que soy, me parezco al niño que le estan enseñando a caminar  y la verdad que es bastante frustante


Título: Re: Personalizar Batch
Publicado por: Eleкtro en 20 Septiembre 2013, 12:25 pm
Ay señor... No me rio, todos hemos sido novatos, pero es que tienes que leer un poco sobre el lenguaje y practicarlo unas cuantas veces antes de ponerte a hacer códigos sin saber.


Código
  1. @Echo OFF & Setlocal EnableDelayedExpansion
  2.  
  3. Set "DirPath=%*"
  4. If "%DirPath:~-1%" EQU "\" (Set "DirPath=%DirPath:~0,-1%")
  5.  
  6. Set /P "Name=Nombre de Cliente:"
  7. Call :ToWordCase "%Name%"
  8.  
  9. Set "FullPath=%DirPath%\%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%%WordCaseName%"
  10.  
  11. MKDIR "%FullPath%" && (Explorer "%FullPath%")
  12.  
  13. Pause&Exit
  14.  
  15. :ToWordCase
  16. Set "Alphabet=ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  17. For %%# in (%~1) do (
  18. Set "Word=%%#"
  19. Set "Char=!Word:~0,1!"
  20. If "!Char!" EQU "a" (Set "X=%Alphabet:~0,1%")
  21. If "!Char!" EQU "b" (Set "X=%Alphabet:~1,1%")
  22. If "!Char!" EQU "c" (Set "X=%Alphabet:~2,1%")
  23. If "!Char!" EQU "d" (Set "X=%Alphabet:~3,1%")
  24. If "!Char!" EQU "e" (Set "X=%Alphabet:~4,1%")
  25. If "!Char!" EQU "f" (Set "X=%Alphabet:~5,1%")
  26. If "!Char!" EQU "g" (Set "X=%Alphabet:~6,1%")
  27. If "!Char!" EQU "h" (Set "X=%Alphabet:~7,1%")
  28. If "!Char!" EQU "i" (Set "X=%Alphabet:~8,1%")
  29. If "!Char!" EQU "j" (Set "X=%Alphabet:~9,1%")
  30. If "!Char!" EQU "k" (Set "X=%Alphabet:~10,1%")
  31. If "!Char!" EQU "l" (Set "X=%Alphabet:~11,1%")
  32. If "!Char!" EQU "m" (Set "X=%Alphabet:~12,1%")
  33. If "!Char!" EQU "n" (Set "X=%Alphabet:~13,1%")
  34. If "!Char!" EQU "o" (Set "X=%Alphabet:~14,1%")
  35. If "!Char!" EQU "p" (Set "X=%Alphabet:~15,1%")
  36. If "!Char!" EQU "q" (Set "X=%Alphabet:~16,1%")
  37. If "!Char!" EQU "r" (Set "X=%Alphabet:~17,1%")
  38. If "!Char!" EQU "s" (Set "X=%Alphabet:~18,1%")
  39. If "!Char!" EQU "t" (Set "X=%Alphabet:~19,1%")
  40. If "!Char!" EQU "u" (Set "X=%Alphabet:~20,1%")
  41. If "!Char!" EQU "v" (Set "X=%Alphabet:~21,1%")
  42. If "!Char!" EQU "w" (Set "X=%Alphabet:~22,1%")
  43. If "!Char!" EQU "x" (Set "X=%Alphabet:~23,1%")
  44. If "!Char!" EQU "y" (Set "X=%Alphabet:~24,1%")
  45. If "!Char!" EQU "z" (Set "X=%Alphabet:~25,1%")
  46. Set "WordCaseName=!WordCaseName! !X!!Word:~1!"
  47. )


Saludos!


Título: Re: Personalizar Batch
Publicado por: Pédrin-2 en 20 Septiembre 2013, 16:56 pm
Hola EleKtro H@cker
hay algo que no funciona porque no me deja escribir el nombre ( no hace la pausa), ni me crea la carpeta
lo que ve es que en el codigo que has puesto el Setlocal lo tienes del mismo color que ejem, Echo sin en cambio en mi notepad ++ no sale de color azul, sale negro.

sabes que puede pasar ??

Un saludo


Título: Re: Personalizar Batch
Publicado por: Eleкtro en 20 Septiembre 2013, 17:40 pm
Vamos por partes,

El código es 100% funcional, no uses Notepad++, abre el Bloc de notas, pega el código, y guárdalo con codificación ANSI.

Si te sigue sin funcionar, comenta el modo en el que lo estás intentando usar.

EDITO:
Dime una cosa... ¿No será que tu estás intentando abrir diréctamente el script haciendo click en el archivo?,
Lo comento porque el script debe recibir un argumento espeficando una ruta, como en todos los códigos que has mostrado hasta ahora...


lo que ve es que en el codigo que has puesto el Setlocal lo tienes del mismo color que ejem, Echo sin en cambio en mi notepad ++ no sale de color azul, sale negro.

sabes que puede pasar ??

-.-

Ains, no te preocupes por eso... el término es "Syntax Highlighting", tanto este foro SMF como esos editores de texto usan plugins para resaltar la sintaxis de los lenguajes de programación,
ves del mismo color "Echo" y "SetLocal" porque son dos Keywords así que se resaltan en el mismo color, si tu editor de texto no resalta "SetLocal" entonces el plugin que usan para Batch es una basura, aunque el plugin GeShi de este foro tiene otros errores mucho más graves que ya comenté en otro post pero nadie me hizo ni caso.

PD: Te recomiendo Sublime Text 3.0 + Plugins de terceros.

Saludos


Título: Re: Personalizar Batch
Publicado por: Pédrin-2 en 20 Septiembre 2013, 18:51 pm

EDITO:
Dime una cosa... ¿No será que tu estás intentando abrir diréctamente el script haciendo click en el archivo?,
Lo comento porque el script debe recibir un argumento espeficando una ruta, como en todos los códigos que has mostrado hasta ahora...

-.-

Saludos

Pues si es lo que hago click en el archivo como siempre
 :rolleyes:   entonces como lo hago???


Título: Re: Personalizar Batch
Publicado por: Eleкtro en 20 Septiembre 2013, 19:01 pm
Vamos a ver, Pedrín-2, me pediste que no me enfade pero es que hay algo que me lleva sacando de quizio en este tema...

¿Esta orden entiendes para que sirve?:
Citar
Código:
set directorio=%1

Si no lo entiendes, ¿Entonces porque la usas en todos los ejemplos que has dado desde un principio?.

Dijiste que alguien te hizo el script, así que yo supuse que esa orden la puso el que te lo codeó, y que la puso con la intención que debe tener, llamar al script desde la consola, pero veo que no es así ni que tampoco tienes intenciones de usarlo así.

En mi último script, reemplaza esta linea:
Citar
Código
  1. Set "DirPath=%*"

Por esta otras:
Código
  1. Set /P "DirPath=Nombre de Carpeta:"

Saludos!


Título: Re: Personalizar Batch
Publicado por: Pédrin-2 en 20 Septiembre 2013, 19:25 pm
Ya estaria si no fuese que la carpeta buena, (la que tiene la fecha y nombre ) se crea dentro de otra.
y te cuento  por encima la historia:
Me dieron este archivo reg:

Código:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Folder\shell\Nueva_carpeta]
@="Crear subcarpeta"

[HKEY_CLASSES_ROOT\Folder\shell\Nueva_carpeta\command]
@="\"C:\\BAT\\Carpeta.bat\"\"%1\""


Este bat:

Código:
echo off
set guion=-
for /f "tokens=1,2,3 delims=/" %%i in ('date /t') do (
set ano=%%k
set dia=%%i
set mes=%%j)
set cadena=%ano%%guion%%mes%%guion%%dia%
set directorio=%1
start cmd.exe /c "CD %directorio% && Md """%cadena%""""


y esta guia  txt:

Código:
Crea en tu disco C una carpeta llamada "BAT" (sin comillas) y aloja allí el fichero Carpeta.bat. Seguidamente haz doble clic sobre Carpeta.reg, pulsa Sí, Aceptar. Verás que a partir de entonces al hacer clic con el botón derecho del ratón sobre cualquier carpeta te aparece una nueva entrada llamada "Crear subcarpeta", que al ser pulsada creará una carpeta dentro de la carpeta seleccionada, y con la fecha actual como nombre ya definido, tal y como pedías.

Espero que te sirva.


Pero ocurrio que descubri, que al hacerle click me la hacia dentro de esa misma carpeta donde estaba el batch.
Entonces puse un acc directo y queria hacer lo mismo, asi al abrirse la carpeta no la tendria que ir buscarla, por eso todo este calvario.

Espero que me hayas entendido

Madre mia cuando abra un hilo preguntando algo no va haber nadie que me conteste   :-[ :-[

Un saludo


Título: Re: Personalizar Batch
Publicado por: Eleкtro en 20 Septiembre 2013, 19:34 pm
Creo que ahora entiendo tus intenciones.

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

Pues deja esta parte del último script así:

Código
  1. @Echo OFF & Setlocal EnableDelayedExpansion
  2.  
  3. Set /P "Name=Nombre de Cliente:"
  4. Call :ToWordCase "%Name%"
  5.  
  6. Set "FullPath=%CD%\%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%%WordCaseName%"
  7.  
  8. MKDIR "%FullPath%" && (Explorer "%FullPath%")
  9.  
  10. Pause&Exit

PD: Por si vas a pregunarlo: La carpeta no se puede abrir en la misma instancia del explorer, es necesario abrir un nuevo proceso del explorer xD.

Saludos


Título: Re: Personalizar Batch
Publicado por: Pédrin-2 en 20 Septiembre 2013, 20:52 pm
Je, je, mo me mandes a t.......... 
pero falta un detallin.
Si escribes en minusculas  100  x  100  perfecto
el problemilla viene cuando escribes en mayusculas, no respeta y sale todo en mayusculas.    :silbar:

Gracias por entenderlo

Un saludo



Título: Re: Personalizar Batch
Publicado por: Eleкtro en 20 Septiembre 2013, 21:45 pm
el problemilla viene cuando escribes en mayusculas, no respeta y sale todo en mayusculas.    :silbar:

Cierto, se me habia pasado ese detalle.

Pero es muy facil de solucionar, puedes hacerlo tu mismo, te doy una pista muy grande:

Citar
Código:
 :ToWordCase
...
If "!Char!" EQU "a" (Set "X=%Alphabet:~0,1%")
...

Duplica las variables, pero tienes que poner una cosa en mayúscula...

Saludos


Título: Re: Personalizar Batch
Publicado por: Pédrin-2 en 20 Septiembre 2013, 23:32 pm
Pues no es tan facil como dices he probado de todo, poniendo codigos en todas las lineas, duplicando todo el contenido de la etiqueta :ToWordCase
cambiando mayusculas, minusculas ,numeros etc y sigo peor
Código:
Set "Alphabet=ABCDEFGHIJKLMNOPQRSTUVWXYZ"    
por       
abcdefghijklmnopqrstuvwxyz

    If "!Char!" EQU "A" (Set "X=%Alphabet:~0,1%")   solo mayuscula


   If "!Char!" EQU "A" (Set "X=%Alphabet:~26,1%") del 26 en adelente




Título: Re: Personalizar Batch
Publicado por: Pédrin-2 en 20 Septiembre 2013, 23:33 pm
Quisiera aprender, pero para llegar al nivel 10 estoy mu verde.
Que barbaridad


Un Saludo


Título: Re: Personalizar Batch
Publicado por: Eleкtro en 21 Septiembre 2013, 00:05 am
Solución:

Código:
If /I "!Char!" EQU "a" (Set "X=%Alphabet:~0,1%")
If /I "!Char!" EQU "b" (Set "X=%Alphabet:~1,1%")

El switch "/I" es para no distinguir entre mayusculas o minusculas, así que en verdad no tienes que duplicar las comparaciones.

Código:
IF /?


De la forma en la que tú lo estás intentando hacer, lo que debiste hacer es esto:

Código:
 If "!Char!" EQU "a" (Set "X=%Alphabet:~0,1%")
 If "!Char!" EQU "A" (Set "X=%Alphabet:~0,1%")

 If "!Char!" EQU "b" (Set "X=%Alphabet:~1,1%")
 If "!Char!" EQU "B" (Set "X=%Alphabet:~1,1%")

etc...

Agregar la comparación del caracter en UPPERCASE, no modifiques el índice del substring (ah no ser que le hayas añadido más caracteres a la variable del alfabeto, claro...)

Hazlo de la manera que prefieras, odo lo demás lo dejas igual como estaba xd

Saludos!


Título: Re: Personalizar Batch
Publicado por: Pédrin-2 en 21 Septiembre 2013, 00:38 am
sigo igual, le he puesto el switch y sigue igual te subo el code

No era como tu dices
tal como tenia el codigo copie todas las variables y las pege  acontinuacion no las intercale 1º con las letras en mayusculas, 2º caumentando la numeracion desde el 26

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%"
 
MKDIR "%FullPath%" && (Explorer "%FullPath%")
 
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!"
)

Citar
Código:
IF /?

esto no lo entiendo


Título: Re: Personalizar Batch
Publicado por: Pédrin-2 en 23 Septiembre 2013, 13:46 pm
Por favor EleKtro H@cker, no me dejes asi,    :-\

Un saludo


Título: Re: Personalizar Batch
Publicado por: Eleкtro 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


Título: Re: Personalizar Batch
Publicado por: Pédrin-2 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


Título: Re: Personalizar Batch
Publicado por: Eleкtro 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!


Título: Re: Personalizar Batch
Publicado por: Pédrin-2 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


Título: Re: Personalizar Batch
Publicado por: Eleкtro 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


Título: Re: Personalizar Batch
Publicado por: Pédrin-2 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


Título: Re: Personalizar Batch
Publicado por: Eleкtro 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


Título: Re: Personalizar Batch
Publicado por: Pédrin-2 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


Título: Re: Personalizar Batch
Publicado por: Eleкtro 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!


Título: Re: Personalizar Batch
Publicado por: Pédrin-2 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