Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - ovichan

#1
Hola, lo que quiero hacer prácticamente ya está hecho, sólo me falta hacer la tarea algo más inteligente al detectar si un nomobre ya existe para evitar que por ejemplo si quiero cambiar "Luis" por "José Luis" provoque "José José Luis".

La base es tirar de un txt, donde habrá un listado por líneas, en cada cual habrá un par de palabras, indicando la palabra a cambiar y la nueva palabra: Luis-José Luis.

Código:

Código (vb) [Seleccionar]
Option Explicit

Dim fso, fso2, strNombreAnterior, StrNombreNuevo, RutaNombres, RutaArchivo, ListaArchivos, Archivo, strContenidoAnterior, strContenidoNuevo, NombresFila, FilaPartida,objFile,value, word

Set fso=CreateObject("Scripting.FileSystemObject")
Set fso2=CreateObject("Scripting.FileSystemObject")
Const Lectura = 1
Const Escritura = 2


RutaNombres="C:\Users\Isra\Desktop\lista.txt"
RutaArchivo="C:\Users\Isra\Desktop\Prueba.txt"

'Establecemos los objetos
Set ListaArchivos = fso.OpenTextFile(RutaNombres,Lectura)
Set Archivo=fso2.OpenTextFile(RutaArchivo,Lectura)

'Leemos el archivo a modificar
strContenidoNuevo=Archivo.ReadAll

Archivo.close

Set objFile = fso.OpenTextFile(RutaArchivo, Escritura)


'Lee línea por línea para saber los valores a modificar en un archivo de texto
Do Until ListaArchivos.AtEndOfStream
'Lee la línea entera
NombresFila = ListaArchivos.ReadLine

'Partimos la línea asignando cada valor a un array
FilaPartida=split(NombresFila ,"-")

'Asignamos a cada variable su valor del array por línea
strNombreAnterior=Trim(cstr(FilaPartida(0)))
strNombreNuevo=Trim(cstr(FilaPartida(1)))

'Comprobamos valores
'wscript.echo strNombreAnterior
'wscript.echo strNombreNuevo
value = InStr(strContenidoNuevo, strNombreNuevo)
'wscript.echo value
[color=red]if value <> 1 then [/color]
strContenidoNuevo=Replace(strContenidoNuevo, strNombreAnterior, strNombreNuevo,1,-1,0)
[color=red]end if [/color]
Loop

'wscript.echo strContenidoNuevo
ListaArchivos.close

objFile.WriteLine strContenidoNuevo
objFile.Close


El problema con value = InStr(strContenidoNuevo, strNombreNuevo) es que al detecta que existe ya no interpreta ninguna otra más con el nombre StrNombreNuevo. Si quito la parte en rojo, cada vez que ejecute los nombres compuesto iran ganando el primer nombre reitativamente.

Pensé en hacer un bucle tal que:
Código (vb) [Seleccionar]

for each word in split(strContenidoNuevo, "")
value = InStr(strContenidoNuevo, strNombreNuevo)
'wscript.echo value
[color=red]if value <> 1 then [/color]
strContenidoNuevo=Replace(strContenidoNuevo, strNombreAnterior, strNombreNuevo,1,-1,0)
[color=red]end if [/color]
next


Sin embargo, el resultado no es el esperado. Imagino que será una trivialidad pero ahora mismo estoy ofuscado ^^'. Gracias.
#2
Hola a todos, he creado un bat para copiar una serie de archivos en un disco externo y mi intencion es que me saque en pantalla los archivos que se han copiado y si ha habido fallos o no. El script es el siguiente, sin embargo, no se si realmente cumple el objetivo del script o conceptualmente me he equivocado.

Código (bash) [Seleccionar]
@echo off
Title Copiar

if not exist "I:\Carpeta" md "I:\Carpeta"

for %%@ in (*.mkv) do (

copy "%%@" "I:\Carpeta" /Y 1>nul & Echo El archivo: "%%@" fue copiado correctamente. || Echo Hubo un fallo al copiar el archivo "%%@".
        echo.

)

pause>nul&exit


He pensado que si está mal, quizás con %ERRORLEVEL% podría sería mejor pero ya implementarlo a esa linea se me escapa. Gracias.
#3
Bueno estoy diseñando una UI para un programa... todo es relativamente precario pues estoy aprendiendo poco a poco como manejarlo. He conseguido insertar un scrollbar dentro del listbox, sin embargo el problema radica en que el scrollbar no desaparece nunca, ni cuando no hay elementos en el listbox. Estoy probando usando Grid, imagino que con pack se puede hacer de otra manera, lo digo pq por ahora me interesa hacerlo con este comando.

El codigo:

Código (python) [Seleccionar]
import os, sys
import win32api
import platform
import gettext
import locale
import sys
from time import sleep

#GUI para EACUI
try:
    import tkinter
    from tkinter import *
except ImportError:
    raise ImportError("Se requiere el modulo Tkinter")

#Configure gettext Define the '_()' function

APP_NAME = "EACUI"
LOCALE_DIR = ('C:\Locale\es\LC_MESSAGES')

gettextt = gettext.translation(APP_NAME, LOCALE_DIR,fallback=True)
_ = gettextt.gettext

#Ventana
root = tkinter.Tk(screenName=None, baseName=None, className='Tk', useTk=1)

'''Titulos'''
root.wm_title("Eac3to GUI v0.0")
#root.title("Eac3to GUI v0.0")
root.wm_frame()

'''Etiqueta'''
#etiqueta=tkinter.Label(root,text="Eac3to GUI v0.0")
#etiqueta.grid(row=1, column=1)


'''Dimension ventana'''
root.wm_maxsize(1000, 1000)
root.wm_minsize(640,640)
root.wm_geometry('640x640')
root.wm_iconbitmap('.\icon.ico')


'''Menus'''
#File
menu = tkinter.Menu(root)
root.config(menu=menu)
menu1_1 = tkinter.Menu(menu, tearoff=0)
menu.add_cascade(label=_("File"), menu=menu1_1)
menu1_1.add_command(label=_("Open"))
menu1_1.add_command(label=_("Close"))
#Options
menu1_2 = tkinter.Menu(menu, tearoff=0)
menu.add_cascade(label=_("Options"), menu=menu1_2)
menu1_2.add_command(label=_("Setup"),command=lambda: setup(_("Setup")))
menu1_2.add_separator()
menu1_2_1 = tkinter.Menu(menu1_2, tearoff=0)
menu1_2.add_cascade(label=_("Language"), menu=menu1_2_1)
menu1_2_1.add_command(label=_("English"),command=lambda: language(_("English")))
menu1_2_1.add_command(label=_("Spanish"),command=lambda: language(_("Spanish")))
#Help
menu1_3 = tkinter.Menu(menu1_2, tearoff=0)
menu.add_cascade(label=_("Help"), menu=menu1_3)
menu1_3.add_command(label=_("About"),command=lambda: about(_("About")))

'''Ventana de carga con scrollbar interno usando Grid'''
text = tkinter.Listbox(root)
text.grid(padx=10,pady=10)
text.bindtags((text, root, "all"))
#for i in range(20):
    #text.insert(i,i)
scrl = Scrollbar(root, command=text.yview)
text.config(yscrollcommand=scrl.set)
scrl.grid_rowconfigure(10)
#scrl.grid(ipadx=200,ipady=20,sticky='e',rowspan=5)
scrl.grid(in_=text,ipadx=200,ipady=20,sticky='ns')

'''Ventana de carga'''
#windows_load=tkinter.Text(root,height = 1, width=int(root.winfo_width())-580,font=("Times", 12),state=tkinter.NORMAL, cursor='arrow',insertwidth=2,exportselection=1)

#windows_load=tkinter.Listbox(root,height=10,width=int(root.winfo_width())-580)
#windows_load.bindtags((windows_load, root, "all"))
#for i in range(20):
    #windows_load.insert(i,i)

#windows_load.pack(anchor='nw',side=TOP, fill=Y, expand=FALSE,padx=10,pady=10)


'''Ejecucion'''
root.mainloop()


¿En donde estoy metiendo la pata?
#4
Scripting / [Python] Aplicacion multilenguaje
15 Agosto 2013, 04:34 AM
Hola a todos, pues nada estoy intentando hacer una aplicacion GUI para un programa de codificacion de audio. El caso es que me ha llamado siempre la atención, desde que llevo varios años traduciendo el programa mkvmerge, el poder usar GNU. Estoy poco a poco intentando hacer pruebas para poder traducir la interfaz y por ahora dar las opciones de dos lenguajes, English y Español.

El codigo que llevo es este:

Código (python) [Seleccionar]
#-------------------------------------------------------------------------------
# Name:        EACUI
# Purpose:     Audio encoding with EAC3TO
#
# Author:      Overdrive80
#
# Created:     13/08/2013
# Copyright:   (c) Overdrive80 2013
# Licence:     <your licence>
#-------------------------------------------------------------------------------
import os, sys
import win32api
import platform
import gettext
import locale
import sys

#Configure gettext Define the '_()' function
def set_gettext():
   APP_NAME = "EACUI"
   LOCALE_DIR = ('C:\Locale\es\LC_MESSAGES')

   t = gettext.translation(APP_NAME, LOCALE_DIR,fallback=True)
   _ = t.gettext

def main():
   #Inicializacion de Gettext
   set_gettext()

   '''Create a list of asociated programs'''
   lista_programas=['eac3to']
   '''Check arquitecture'''
   def is_x64():
       arquitectura=platform.architecture()
       if arquitectura[0] == '64bit':
           #print "Tu sistema es de 64 bits."
           return True
       else:
           #print "Tu sistema es de 32 bits."
           return True
   '''Seek path by default of installating'''
   def find(ruta, program):
       for root,dirs,files in os.walk(ruta):
           for name in files:
               if program+'.exe'==name:
                   path=os.path.join(root, name)
                   return path

   PATH_DEFAULT='C:\\'
   for programa in lista_programas:
       path=find(PATH_DEFAULT, programa)
       if path != None:
           ruta_bus=os.path.split(path)
           print (_('File found %s, in the path %s.')) % programa, ruta_bus[0]
           print (_('Would you like to set this path as access by default to program %s?')) % programa
       else:
           print (_("Not file found %s.")) % programa
           print (_('Would you like set handle program´s path?'))

main()



El archivo "es.mo" es este: https://dl.dropboxusercontent.com/u/19135067/es.mo

El problema radica cuando intento ejecutar el script de manera que coja el "es.mo", me da este error:



Es algo curioso pq he podido generar correctacmente el archivo "es.pot" con:

Código (dos) [Seleccionar]
@echo off
Title .Py to .Pot files
set path=path;C:\Python33\
set /p label="Inserte la etiqueta del idioma (p.e.: es): "
python "C:\Python33\tools\i18n\pygettext.py" -d %label% -o %label%.pot %1
pause&exit


Estoy usando la version 3.2 de python pq la 2, al parecer no tiene implementando gettext.

Espero que me podais echar un cable. Saludos.

EDITO: He conseguido fijar ese problema declarando debajo de la importacion de modulos: "_ =None". Sin embargo, ahora me encuentro este problema:



Hubiera escrito el codigo de otra manera pero me daba fallo al generar el archivo pot, porque gettext no admite expresiones debe ser un formato string.

EDITO2: Solucionado, al menos se ejecuta. Al parecer, todo el fallo ha sido por meter en una funcion el codigo de gettext, cuando debe ir fuera del bloque main. Lo que está tachado y que hice no sirve.
#5
Scripting / [Python] Listar Archivos Carpeta
11 Agosto 2013, 22:46 PM
Bueno... hace poco y a modo de hobby me puse a aprender este lenguaje, y aunque soy un mega noob en esto me permito postear un código para quien quiera criticarlo positiva o negativamente... asi podré seguir mejorando.

Este codigo permite listar los archivos de una carpeta que este en la misma ruta que el script, y lo guarda en un txt. He añadido y no he quitado, un parametro simple de control de ejecucion, a modo de depuracion... aunque podia haber hecho algun try... pero me gustan las ventanitas jiji

Código (python) [Seleccionar]
#-------------------------------------------------------------------------------
# Name:        Overdrive
# Purpose:     Listar archivos directorio en un txt
#
# Author:      Overdrive
#
# Created:     10/08/2013
# Copyright:   (c) Overdrive 2013
# Licence:     Free
#-------------------------------------------------------------------------------
#import fnmatch
import os
from tkinter import messagebox
import tkinter

#Creamos una clase para la ventana de control depuración
class Msgbox(object):

   #""" Constructor """
   def __init__(self, text):
       self.text=text
       window = tkinter.Tk()
       window.wm_withdraw()

   def msg(self):
       messagebox.showinfo("Ventana de depuración", self.text)

def escribir(name):

   #Creamos el objeto del archivo de texto
   fd = os.open( name, os.O_RDWR|os.O_CREAT )
   mi_archivo=os.fdopen(fd,"r+")

   #Grabamos cada archivo del directorio en el txt, exceptuando el script
   for file in os.listdir('.'):
       if file[-2:] != 'py' and file[-3:] != 'txt':
           mi_archivo.write(str(file)+"\n")

   #Cerramos el archivo creado
   mi_archivo.close()

def main():
   #Comprobamos si existe .txt y sino lo creamos

   if os.path.isfile(str(os.curdir)+"\lista.txt")==False:
       ventana=Msgbox("No existe el fichero.")
       ventana.msg()
       escribir("lista.txt")
   else:
       ventana=Msgbox("Si existe el fichero.")
       ventana.msg()
       os.remove('lista.txt')
       escribir("lista.txt")

main()
#6
Scripting / QPF to Chapter file
12 Julio 2013, 05:48 AM
Hola buenas, estaba intentando hacer un conversor de archivos qpf files (que es un txt con otra extensión) para calcular una serie de codigos de tiempo en base a un numero prefijado de 23.976 frames por segundo.

El caso es que nada mas empezar no me ejecuta la tarea mas basica que es motrar en la consola las lineas del qpf. El código es este:

Código (dos) [Seleccionar]
@echo off
SetLocal EnableDelayEdexpansion

@ECHO OFF
FOR /F "tokens=*" %%A IN ("C:\Users\Isra\Desktop\Nueva carpeta\10. QPFILE_NAME.txt") DO CALL:Tratar "%%A"
GOTO:EOF

:Tratar
  SET Reg=%~1
  ECHO %Reg%
  GOTO:EOF

pause&exit


El formato de un archivo qpf es:

0 K -1
2616 K -1
16072 K -1
16384 K -1
32440 K -1
34768 K -1


Entonces necesito coger cada numero, tratarlo durante el proceso del for, calcular el codigo de tiempo, e ir almacenandolo en otro txt. El algoritmo sería algo como:

Codigo de tiempo=2616*0,0417083sg=109,1089128sg/60=1,81848188=1min+0,81848188

resto_tiempo=0,81848188*60=49,1089128sg=49sg+109ms

total 1min49sg109ms-->00:01:49.109

Tras calcular el primer resultado tendria que discenir si x>=3600 entonces el resultado que da seria en horas, si x>=60 daria en minutos, x<60 en segundos.

Vamos, pero que me gustaria saber pq no me lista los numeros. Tengo windows8, por si afecta en algo.
#7
Buenas, estoy haciendo una prueba para despues poder implementar una movida absurda de las que me hago en casa ^^. El caso es que intento buscar un archivo por su string para que me devuelva la ruta completa, pero al hacer la comparacion con el IF, el caso es sensitivo. Entonces necesitaria hacer un lowcase.

Me explicare mejor con el codigo, jeje

set /p nombre="Introduzca el nombre a buscar: "

for /r c:\ %%@ in ("%nombre%.*") do (

if "%%~n@"=="%nombre%" echo %%@

)


Por ejemplo estoy buscando la palabra "megui", pero este archivo esta almacenado con el string "MeGUI". Entonces, si no inserto en el set, lo mismo no me devuelve ningun resultado.
#8
Buenas, por motivos un tanto raros he creado este script. Mi duda mas bien es para optimizar el codigo a algo que seguramente se pueda hacer mas sencillo que todo el codigo que he usado, y que ahora pongo.

Principalmente sirve para localizar la instalacion de un programa portable, en este caso VirtualDub.

Código (dos) [Seleccionar]

@echo off

:: Nos situamos en la siguiente carpeta

cd /d "%homedrive%\Program Files (x86)"

:Listamos directorios de la carpeta actual y comprobamos si se encuentra Virtualdub en ella

dir /b > "%temp%\info_vdub.txt"

::Buscamos coincidencia de string, creamos un archivo de texto para valernos del mensaje de errorlevel.

Find /i "virtualdub" < "%temp%\info_vdub.txt" > "%temp%\StringCheck.txt"

If %ERRORLEVEL% == 0 (
set "x86=true"
) else (
set "x86=false"
)
::Borramos archivos temporales

del "%temp%\StringCheck.txt"
del "%temp%\info_vdub.txt"

set "path_x86=%cd%"

:: Nos situamos en la siguiente carpeta y hacemos mas de lo mismo

cd /d "%homedrive%\Program Files"


dir /b > "%temp%\info_vdub.txt"

Find /i "virtualdub" < "%temp%\info_vdub.txt" > "%temp%\StringCheck.txt"

If %ERRORLEVEL% == 0 (

set "x64=true"
) else (
set "x64=false"
)

::Borramos archivos temporales

del "%temp%\StringCheck.txt"
del "%temp%\info_vdub.txt"

set "path_x64=%cd%"

::Info en pantalla

Echo VirtualDub esta instalado en:
echo.

if "%x86%"=="true" (

echo %path_x86%
echo.
)

if "%x64%"=="true" (

echo %path_x64%
echo.

)
#9
Buenas, en esta ocasion estoy haciendo un listado de unos archivos matroska, y usando el for con tokens, para seleccionar la parte a guardar en la lista. Al tener que usar enableddelayedexpasion, ciertos caracteres son destruidos. He intentado cambiar el chcp pero sin resultado. El codigo es este:

@echo off
Title Listar nombres capitulos
Setlocal EnableDelayedExpansion

rem CHCP 850 >nul
if exist "lista.txt" (erase "lista.txt")

for /f "tokens=2 delims=[]" %%i in ('dir /b /o:n "*.mkv"') do (

set "nom=%%i"

echo !nom:~1! >> "lista.txt"
)

pause


Lo curioso es que si lo ejecuto desde cmd, se muestra perfectamente con sus caracteres.

Original



Queda algo asi sin extenderme:

#10
Hola a todos, el caso es que ya sabeis lo tedioso que puede resultar aplicar las updates de windows manualmente, o de forma automatica cuando su numero asciende a 700 revisiones, como es mi caso. El agente de updates de windows solo me requiere 78 para que este protegido por lo que solo quiero instalar esas. Para ello he utilizado este codigo, para listas todas las updates disponibles:

@Echo off
Title Instalador con lista
set ruta=F:\HDD negro\Utiles y programas\Programas De Microsoft\Microsoft_Updates\updates\

for /f %%i in ('dir /b /o:n "*kb*.msu"') do (

if not exist "updates_total.txt" (
echo %%i >> "updates_total.txt" )
)

::2 parte
for /f "tokens=1 delims=*" %%i in (updates.txt) do (find /i "%%i" "%ruta%updates_total.txt" >> "updates_instalar.txt"  )


El archivo updates.txt tiene un formato asi:

*KB2655992*
*KB2691442*
*KB2698365*
*KB3719985*
*KB2506212*
*KB2507618*
*KB2536276*
*KB3544893*
*KB2560656*
*KB2564958*


El caso es que find funciona bien, pero lo que devuelve en el archivo "updates_instalar.txt" tiene un formato muy raro, y yo esperaba que fuese simplemente el nombre de la revision, para posteriormente usar este archivo de texto en otro FOR, y las ejecute. El formato erroneo es este:


---------- F:\HDD NEGRO\UTILES Y PROGRAMAS\PROGRAMAS DE MICROSOFT\MICROSOFT_UPDATES\UPDATES\UPDATES_TOTAL.TXT
Windows6.1-KB2655992-x64.msu 

---------- F:\HDD NEGRO\UTILES Y PROGRAMAS\PROGRAMAS DE MICROSOFT\MICROSOFT_UPDATES\UPDATES\UPDATES_TOTAL.TXT
Windows6.1-KB2691442-x64.msu 

.....


Imagino que habra alguna manera de eliminar los encabezados esos.

Inicialmente pense que podria kizas, listar las updates que el agente de windows update te informa para instalar, pero no tengo ni idea de como se podria hacer, quizas con wmic. Lo que si he visto por la red es la manera de listar las updates instaladas...

Gracias de antemano.
#11
Hola otra vez  :rolleyes:, en esta ocasion estoy intentado añadir a un archivo un prefijo en su nombre, que coincide con el nombre de la subcarpeta contenedora, y me explico con un ejemplo.

Los archivos en cuestion son del tipo: 7. Español.ass y 7. Japones.ass. Estan contenidos en subdirectorios con esta ruta: D:\DBZ\DBZ1_14\079. Como imaginareis los tres digitos ultimos son los que varian siempre, de manera que intento que quede los archivos renombrados asi: 079 - Español.ass. El renombrado deseo hacerlos sobre una copia de ese archivo.

He iniciado un codigo para comprobar si puedo almacenar en una variable cada prefijo pero no funciona:

for /R %%i in (*.ass) do (
set nom=%%i
echo %%nom:~15,3%%
)


Si unicamente hago echo de la variable i, sale la ruta de cada archivo de forma correcta. Imagino que tenga que ver con la recursividad pero no se como solucionarlo con este mismo codigo. Imagino que habra otra manera mas correcta pero no me enteraré de lo que estoy haciendo.

De forma teorica el codigo general seria algo asi:

for /R %%i in (*.ass) do (
set nom="%%i"

set prefix=%nom:~15,3%

set lex=%nom:~22,14%

set nombre=Capitulo %prefix% - %lex%

set ruta=%nom:~0,15%

copy "%%i" "%ruta%%nombre%"

)


No funciona ni a tiros pero estructuralmente esto es lo que deseo hacer.

#12
Scripting / [BATCH] Cambiar extension a archivos
19 Septiembre 2012, 16:40 PM
Buenas  ;-)

Estoy intentando cambiar de manera masiva las extensiones de ciertos archivos, para ello he creado este código

@echo off
Title Renombrar extensiones de archivos

for %%i in ("Anna Grace _ You Make Me Feel.m4r") do (
set filename="%%~ni"
echo %~dp0%filename%.m4r
echo %filename%.m4a
rename %~dp0%filename%.m4r %filename%.m4a
)
pause>nul


Sin embargo, no funciona. Si a partir del set, lo saco del bucle, filename si pilla el nombre pero el rename sigue sin funcionar. Qué estoy haciendo mal.

Saludos y gracias de antemano.
#13
Scripting / [BATCH] Edición archivo SRT
3 Agosto 2012, 20:17 PM
Hola de nuevo, el caso es que necesito editar 291 archivos del tipo srt, que en base es practicamente es lo mismo que un txt, con extension diferente.

Bueno he leido este hilo para poder hacer sustitucion de palabras http://foro.elhacker.net/scripting/acciones_sobre_archivos_de_texto_batch-t242748.0.html. Sin embargo este codigo me da error y no me funciona:

Intento cambiar en el texto los puntos suspensivo con espacios por puntos suspensivos sin espacios.
Código (dos) [Seleccionar]
@echo off
setlocal enabledelayedexpansion
for /f "tokens=* delims=" %%x in ('type C:\Users\Isra\Desktop\Cap 01 B.srt') do (
set linea=%%x
set linea=!linea:. . .=...!
call :show !linea!
)
goto:eof
:show
echo %* >> "C:\Users\Isra\Desktop\Cap 01 B mod.srt"
goto:eof


Alguna idea de que está pasando??




Elektro H@cker: No tienes que usar el botón "insertar cita" sinó el de "insertar código".
#14
Scripting / [BATCH] Problemas con else if
13 Julio 2012, 19:35 PM
Buenas, se que en este lenguaje no existe la particula propiamente dicha, ELSE IF sino que hay que hacer otra cosa. He estado mirando por la web y la solucion seria anidar los condicionales pero desgraciadamente no me sale  :-(

Os dejo el código, y marco de negro la zona conflictiva. A ver en que me estoy equivocando.

Código (dos) [Seleccionar]
@echo off
color 0A
title Apagado condicional

:inicio
echo ¨Qu, quieres hacer?
echo.
echo 1. Apagar en un tiempo espec¡fico
echo 2. Apagar
echo 3. Reiniciar
echo 4. Cerrar sesion
echo 5. Hibernar
echo 6. Cancelar
echo.
echo 7. Quitar
echo.

set /p eleccion="Elija una opci¢n: "
if %eleccion%==1 goto apagado
if %eleccion%==2 shutdown -s -f
if %eleccion%==3 shutdown -r -f
if %eleccion%==4 shutdown -l -f
if %eleccion%==5 shutdown -h -f
if %eleccion%==6 goto cancelar
if %eleccion%==7 exit
echo Elecci¢n inv lida: %eleccion%
echo.
pause
cls
goto inicio

:apagado
cls
set /p min="Minutos antes de apagar: "
set /a sec=60*%min%
shutdown -s -f -t %sec%
cls

:: Opcion con extractor de caracteres
rem set h=%time:~0,2%
rem set m=%time:~3,2%
rem set s=%time:~6,2%
rem set ms=%time:~9,2%

:: Opcion con bucle

for /F "tokens=1,2,3,4 delims=:," %%H in ("%time%") do set "h=%%H" & set "m=%%I" & set "s=%%J" & set "ms=%%K"

:: Suma de los minutos insertados a la hora actual, para ser mostrada en la interfaz
set /a m=%m%+%min%

:: Reajustar horas y minutos
if %m% GEQ 60 set /a h=%h%+(%m%/60) && set /a m=(%m%)%%60
if %h% GEQ 24 set /a h=(%h%)%%24


Esta es la parte que no funciona:
Código (dos) [Seleccionar]
:: Mensaje de salida, en formatos diferentes

IF %h% LSS 10 (IF %m% LSS 10 ("echo El apagado se iniciar  a las 0%h%:0%m%:%s%,%ms%.")

) ELSE (

IF %h% GEQ 10 (IF %m% LSS 10 ("echo El apagado se iniciar  a las %h%:0%m%:%s%,%ms%."))

) ELSE (

IF %h% LSS 10 (IF %m% GEQ 10 ("echo El apagado se iniciar  a las 0%h%:%m%:%s%,%ms%."))

) ELSE (

echo "El apagado se iniciar  a las %h%:%m%:%s%,%ms%."

)
)
)

echo.
goto inicio

:cancelar
cls
shutdown -a
pause
cls
goto inicio




Saludos y gracias de antemano.
#15
Scripting / [BAT] Duda con FOR
12 Julio 2012, 05:24 AM
Bueno estoy ajustando un script que tenía para que el apagado se realice a una hora, y queria que en la pantalla mostrase la hora en la que se iniciara el apagado. Como no se si se puede operar con horas, lo que he intentado es extraer los caracteres de la variable %time% para sumarle a cada un token su correspondiente valor. El caso es que con for, me incluye un espacio que intento quitar pero no puedo. He realizado el mismo proceso y con exito con los extractores de caracteres, pero queria probar con el FOR. Os pongo la trivialidad del codigo.

@echo off
set /p min="Minutos antes de apagar: "
set /a sec=60*%min%

:: Opcion con extractores de caracteres

rem set h=%time:~0,2%
rem set m=%time:~3,2%
rem set s=%time:~6,2%
rem set ms=%time:~9,2%

:: Opcion con un bucle

for /F "tokens=1,2,3,4 delims=:," %%H in ("%time%") do set h=%%H && set m=%%I && set s=%%J && set ms=%%K

rem set /a m=%m%+%min%

rem IF - if %m% GEQ 60 set /a h=%h%+(%m%/60) && set /a m=(%m%)%%60

echo %h%:%m%:%s%,%ms%

pause


la salida seria: 11 :12 :23 ,70. Y desearia saber como podria hacer que extraiga los valores sin los espacios para que se muestre asi: 11:12:23,70.

Imagino que es una boberia pero es una curiosidad mas. ^^
#16
Hola, no soy un gran experto pero al codificar audio mediante archivos bat, me he topado con un problemilla. Para solventarlo tendria  que usar una funcion exportable de una dll llamada nicaudio.dll. Mi pregunta reside en si existe la posibilidad de invocarla en bat y poder usarla en un bucle de codificacion.

Por ahora lo que tengo es:

Código (dos) [Seleccionar]
FOR %%A in (*.wav) do (C:\flac.exe -f -8 %%A)

El problema es que flac no soporta wav de 32bits depth. Lo que necesito es poder usar desde bat es la funcion ConvertAudioTo24bit() de la funcion nicaudio.dll de avisynth

Es posible usando rundll32??

Gracias
#17
Scripting / Instalacion fallida dll con bat
1 Marzo 2012, 17:22 PM
Hola a todos, a ver si me podeis echar un cable ya que tengo un problema con el famoso run as. El caso es este:

Tengo una dll que necesito instalar, tengo el archivo inf que funciona correctamente en sistemas x86 pero no en x64, de ahi que tenga que hacer un bypass, por asi decirlo ^^. El archivo bat de instalación que he creado es de una linea de ejecución:

rundll32.exe setupapi.dll,InstallHinfSection DefaultInstall 0 huffyuv.inf

El problema es que evidentemente no pilla donde esta el archivo inf, si le pongo %cd% para indicarle la actual directorio supuestamente se solucionaria pero como necesito derechos de administrador para copiar archivos en system32, el valor de %cd% cambia a C:\Windows\system32 y no me sirve, claro.

Os dejo los archivos para que veais a que me refiero, porque quizas no me he explicado correctamente. La dll es un mero encoder de video lossless.

Quizas es mas facil modificar el archivo inf, pero no se hacerlo.

http://dl.dropbox.com/u/19135067/huffyuv-2.1.1.rar

Gracias por adelantado.



#18
Bueno el hecho es que estoy intentando listar todas las carpetas en donde tengo una discografia de musica. Todo va bien con este comando

@echo off
color 0A
title Listar archivos carpetas
cd "path"

dir /s /b /a:d >"lista de titulos.txt"
pause>nul


Sin embargo en el txt aparece el path de cada carpeta de donde esta ubicada en windows, y me gustaria que se filtrara para que solo aparecieran el nombre de las carpetas y subcarpetas. Habia pensado en la posibilidad de abrir desde el bat el txt, al terminar el listado, buscar el string del path y sustituirlo por echo. o vacio. Pero a esto ya no llego con este lenguaje ^^

Gracias de antemano, y saludos
#19
Scripting / Script para extraer listado mp3
22 Diciembre 2011, 14:09 PM
Feliz navidad a todos. Bueno este es mi primer bat ^^, y la verdad es que todo se ejecuta bien excepto que no redirecciona en el caso de errorlevel 2

@echo off
color 0A
title Listar archivos carpetas

:start
set /p ruta=Inserte la ruta de la carpeta:
echo.
cd %ruta%
if errorlevel 1 (echo Inserto una ruta incorrecta, vuelva a introducirla. & cls & goto start)

:accion
set /p nombre_archivo=Inserte el nombre de archivo de texto donde guardar el resultado:
if exist "%ruta%\%nombre_archivo%.txt" (choice /c sn /m "Desea sobreescribir archivo, Si(s) o no(n):  ") else goto escribir
if errorlevel 1 goto escribir
if errorlevel 2 (cls & goto accion)


:escribir
dir /b *.mp3>%nombre_archivo%.txt
pause>nul


Una ayudita please ^^