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 - FranciskoAsdf

#1
Hola estimados,

Vengo a solicitar su ayuda para intentar resolver un problema que me tiene de cabeza, literalmente xD!

El tema es "super simple", quiero importar datos desde una planilla Excel a una tabla en Access, PERO no me funciona y no puedo saber porque.

Para intentar esclarecer un poco y me puedan entender, estos son los archivos que uso.

Una planilla Excel, donde los datos están distribuidos en 6 columnas sin formato (no es un archivo CSV). Probé poniendo el mismo nombre de los campos que en la base de datos, pero no funcionó.

168914 asdf 28/11 30/11 4.890 3990
132112 asdf 28/11 30/11 4.890 40% DCTO
149955 asdf 28/11 30/11 4.890 40% DCTO
149956 asdf 28/11 30/11 4.890 40% DCTO
178377 asdf 28/11 30/11 4.890 40% DCTO
178379 asdf 28/11 30/11 4.890 40% DCTO
178380 asdf 28/11 30/11 4.890 40% DCTO
185147 asdf 28/11 30/11 4.890 40% DCTO
197620 asdf 28/11 30/11 4.890 40% DCTO
208424 asdf 28/11 30/11 4.890 40% DCTO


Y la base de datos Access.



Y el código que tengo para hacerlo es el siguiente:
Código (vb) [Seleccionar]

Option Explicit

Private Sub cmdLoad_Click()
Dim excel_app As Object
Dim excel_sheet As Object
Dim db As Database
Dim new_value As String
Dim row As Integer

    Screen.MousePointer = vbHourglass
    DoEvents

    Set excel_app = CreateObject("Excel.Application")

'    excel_app.Visible = True

    excel_app.Workbooks.Open FileName:=txtExcelFile.Text

    If Val(excel_app.Application.Version) >= 8 Then
        Set excel_sheet = excel_app.ActiveSheet
    Else
        Set excel_sheet = excel_app
    End If

    Set db = OpenDatabase(txtAccessFile.Text)

    row = 1
    Do

        new_value = Trim$(excel_sheet.Cells(row, 1))

        If Len(new_value) = 0 Then Exit Do

        db.Execute "INSERT INTO BDOfertas VALUES (" & new_value & ")" ' ACA ES DONDE ME MARCA AL MOMENTO DE MOSTRAR EL ERROR EN TIEMPO DE EJECUCION. (LINEA 34)

        row = row + 1
    Loop

    db.Close
    Set db = Nothing


    excel_app.Quit
    Set excel_sheet = Nothing
    Set excel_app = Nothing

    Screen.MousePointer = vbDefault
    MsgBox "Copied " & Format$(row - 1) & " values."
End Sub

Private Sub Form_Load()
Dim file_path As String

    file_path = App.Path
    If Right$(file_path, 1) <> "\" Then file_path = file_path & "\"
    txtExcelFile.Text = file_path & "TEST.xls"
    txtAccessFile.Text = file_path & "CLLBD.mdb"
End Sub


Y el error que obtengo es el siguiente:


Error '3346' en tiempo de ejecución:

El número de valores de consulta y el número de campos de destino son diferentes.



He intentado con muchos códigos hacer lo que quiero, pero nada parece funcionar, o yo lo estoy haciendo mal. Solo me falta esto para terminar este formulario del proyecto, pero no se como solucionarlo.


Atento a comentarios,
Atte.
Francisko.
#2
Estimados, buenas tardes (dias, noches, etc)

Hoy vengo a solicitar su ayuda para hacer un filtro a un DataGrid que me esta quebrado la cabeza xD.

Uso el siguiente codigo para cargar los datos al DataGrid:

Código (vb) [Seleccionar]

Sub Conexion()
   Set cn = New ADODB.Connection
   cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\DataAndStuff\cllbd.mdb;Persist Security Info=False"
   Set rs = New ADODB.Recordset
   rs.ActiveConnection = cn
   rs.CursorLocation = adUseClient
   rs.CursorType = adOpenDynamic
   rs.LockType = adLockOptimistic
   rs.Source = "Select * From BDOfertas"
   rs.Open
   
End Sub


Hasta ahí todo bien.
Ahora, lo que quiero hacer es (con dos TextBox y un CommandButton) un filtro por rango de fechas. PERO (¬¬) no me funciona y no me arroja ningún error ni nada D:.

Para hacer el filtro tengo el siguiente codigo:

Código (vb) [Seleccionar]

Sub ConsultaFechas()

   SqlDos = "SELECT * FROM BDOFertas WHERE F_Desde > " & txtFechaUno.Text & " And F_Hasta < " & txtFechaDos.Text & ""
   Set rs = New ADODB.Recordset
   rs.CursorLocation = adUseClient
   rs.Open SqlDos, cn, adOpenStatic, , adCmdText

End Sub


Se supone que ahí debería filtrar solo ese rango de fechas, pero no me funciona, no se porque, y como dije antes, tampoco me da ningún error. Solo no filtra.

Si alguno de uds me pudiese ayudar con esto. En realidad nunca he sido bueno con las consultas xD.

Saludos y gracias de ante mano!.

PD: Probe con RS.Update al final del Sub, pero me da el error: "El recorset actual no permite actualizaciones asdf"
#3
Hola! :D, he vuelto, con mas preguntas xD.

Directo al grano a ver si alguien me puede ayudar T_T,

Tengo un formulario en donde proceso un archivo Excel (esto me sabe a Déjà vu xD), todo bien, pero quiero que al terminar todo el proceso se abra el archivo para poder seguir usándolo, pero (siempre un pero ¬¬) no me resulta abrirlo, me aparecen una serie de errores antes de abrir el primero archivo Excel de la carpeta y NO el que estoy procesando.

Este es el código que uso para abrir el archivo:

Código (vb) [Seleccionar]

Shell(RutaExcelExe & " " & InvFilePath)

Donde:

RutaExcelExe contiene la ruta donde esta instalado MSExcel.


C:\Archivos de Programa\Microsoft Office\Office12\Excel.exe


InvFilePath contiene la ruta completa del archivo que estoy procesando. La ruta que contendrá esta variable puede variar (valga la redundancia) ya que el archivo puede ser tomando desde cualquier parte desde un CommonDialog.

Los errores que obtengo son los siguientes

No se encontró "C:\Documents.xlsx" bla bla bla
No se encontro "and.xlsx"
No se encontro "Settings\panxin\escritorio\ProyectoAsdf\XLSX's\.xlsx"
No se encontro "TEST\Copia.xls"
No se encontro "(2).xlsx"


Lo intente cambiando el comando de la siguiente forma, pero  con comillas ya no toma las variables como variables y si como la ruta y el nombre del archivo, obteniendo el error
Código (vb) [Seleccionar]

Shell("RutaExcelExe" & " " & "InvFilePath")



"No se encuentra el archivo "InvFilePath"" ¬¬


Así es que es por esto que vengo a solicitar vuestra ayuda a ver si alguien me puede guiar :D!

Saludos y gracias de ante mano :D!


#4
Estimados, necesito su ayuda de nuevo!

Necesito saber como modificar un valor DWORD en el registro, el valor cambia de 1  a  0, he buscado pero NO ENTIENDO NADA DE ESTO, y necesito que me guíen o ayuden directamente xD por favor xD.

tengo la ruta dónde está la clave y el nombre.

["HKEY_CURRENT_USER\Software\Microsoft\Office\" & ExcelVersion & "\Excel\Security\" ]
y la clave es AccessVBOM.

por favor si alguien me puede ayudar,  es lo único que me falta para terminar mi programa.

gracias de ante mano!

Saludos!
#5
Hola a todos, saludos de nuevo! :D

Hoy vengo a solicitar su ayuda con sobre como habilitar una opción de Excel mediante código. Les explico mejor:

Tengo terminado un formulario para procesar archivos .XLS generados por SAP. Lo que hago es crear un MACRO desde Visual, añadirla a Excel y ejecutarla, hasta ahí todo bien. El tema es que necesito habilitar una opción de Excel para evitar que me de el siguiente error:



Y la opción que necesito habilitar mediante código es la siguiente:



Estoy haciendo el programa para la empresa en la que trabajo y solo me falta eso, ya que la idea es que los usuarios no tengan que ir a opciones "extrañas" ya que no todos tienen la misma versión de Office como para explicar en el programa como llegar a esa opción y habilitarla.

Dejo el código que uso para Generar y Ejecutar el macro.

Código (vb) [Seleccionar]

Dim ExcelApp As New Excel.Application
Dim HojaExcel As Excel.Worksheet
Dim LibroExcel As Excel.Workbook
Dim ModuloExcel As Object
Dim CodigoMacro As String
Dim Linea As String, Total As String
Dim EstrucComercial As String
Dim InvFilePath As String

Private Sub Command1_Click()
If InvFilePath = "" Then
    respuesta = MsgBox("Debe seleccionar un archivo a procesar.", vbExclamation, "Cuidado!.")
    Exit Sub
    Else
Command1.Caption = "Procesando..."
Command1.Enabled = False
BBuscarXls.Enabled = False

PB1.Value = 0
PBLabel.Caption = "Buscando Archivo..."
PB1.Value = PB1.Value + 1

EstrucComercial = App.Path & "\DataAndStuff\EstructuraComercial3.0.xlsx"
PBLabel.Caption = "Abriendo Archivos..."
PB1.Value = PB1.Value + 1

Set LibroEC = ExcelApp.Workbooks.Open(EstrucComercial)
Set LibroExcel = ExcelApp.Workbooks.Open(InvFilePath)

PBLabel.Caption = "Buscando Datos..."
PB1.Value = PB1.Value + 1

Set HojaExcel = LibroExcel.Sheets.Item(1)

PBLabel.Caption = "Configurando Consulta..."
PB1.Value = PB1.Value + 1

Set ModuloExcel = LibroExcel.VBProject.VBComponents.Add(vbext_ct_StdModule) ' Aca es donde daria problemas en la ventana de programador y en el exe compilado.
'ExcelApp.Visible = True

PBLabel.Caption = "Ejecutando Consulta..."
PB1.Value = PB1.Value + 1

CodigoMacro = _
    "Sub OrdenPlanillaInventario()" & vbCr & _
    Total & vbCr & _
    "End Sub"
   PBLabel.Caption = "Ordenando Datos..."
   PB1.Value = PB1.Value + 1
   
ModuloExcel.CodeModule.AddFromString CodigoMacro
ExcelApp.Run ("OrdenPlanillaInventario")

PBLabel.Caption = "Guardando Archivo..."
PB1.Value = PB1.Value + 1

ExcelApp.DisplayAlerts = False
LibroExcel.SaveAs InvFilePath, FileFormat:=xlNormal
LibroExcel.Close SaveChanges:=False

PBLabel.Caption = "Listo!."
PB1.Value = PB1.Value + 1

ExcelApp.Quit
Command1.Caption = "Listo!."
Command1.Enabled = False
BBuscarXls.Enabled = False

End If
End Sub



Saludos y gracias de ante mano :D!
#6
Hola, buenas , :DD


Tengo una duda sobre como implementar una comprobacion sobre un inputbox.

Tengo este codigo

Código (VB) [Seleccionar]

'codigo anterior
respuesta = InputBox ("ESCRIBA MOTIVO MERMA", "MERMA")
' demas codigo


El tema es que solo hay 6 tipos de merma, entonces mi idea es hacer una comprobacion sobre SI NO escribe ninguno de los motivos permitidos aparezca un error o advertencia. PERO el tema es que no se como hacerlo.. o sea pense con IF's, pero creo que es muy engorroso hacer un if por cada motivo, porque el programa tendria que comprobar muchas veces cada vez que se ingrese y eso lo haria lento.

Es por eso que vengo a solicitar ayuda a ver si me pueden guiar sobre como hacerlo. Pense que podia ser con WHILE, pero no se como usar WHILE con variables.

Eso, porfavor si alguien me puede ayudar se lo agradeceria mucho.

Los motivos son en este formato :


51
52
53
54
70
71
72


O sea eso seria lo que el usario debiera ingresar y si no, bueno pues que de el error xD.

Saludos y gracias de ante mano.
#7
Hola a todos, saludos :D

Vengo a molestar de nuevo con mis dudas, pero por mas que busque nada me funciono.

Importe mi proyecto de VB6 a VS2008 (algunos pensaran que es tonto o no se xD). Al momento de ejecutar el proyecto me lanza un error de COMException en una consulta a la base de datos Access (*.mdb).

Esta es la forma en que abro/cargo la BD. (En el form Activate)

Código (vb) [Seleccionar]

mibd.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & My.Application.Info.DirectoryPath & "\DBLOCALES.mdb;Persist Security Info=False")


Y esta es la consulta que va en el boton
Código (vb) [Seleccionar]

mirec.Open("SELECT * FROM DBLOCALES WHERE Tienda = '" & (TLocal).Text & "' ", mibd, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockOptimistic)


Y me da el siguiente error cuando va a hacer la consulta.



Busque documentación sobre como controlar este error, pero nada de lo que encontré me sirve o se aplica a mi proyecto. Pensé que podría estar mal echa la consulta, pero no me marca o subraya ninguna error en el IDE, ademas la importación la hace automática, por ende supongo que no esta mal echo.

Bueno en fin, quisiera saber si alguien me puede ayudar con el tema, o por lo menos guiar hacia donde tengo que ir o donde buscar.

Sinceramente creo que mi método es muy anticuado, pero por lo mismo estoy tratando de migrar (actualizar en este caso). El tema es que no se como hacer bien la consulta ahora.

A ver si alguien se anima y me da una mano.

Saludos! y Gracias por cualquier ayuda :D.
#8
Hola!, yo de nuevo aca xD.

Tengo un problema con el control MonthView en VB6. El tema es que al cargar el Form el mes que me aparece en el MonthView es el de Febrero y marca el dia 25 (aparece destacado con un color de fondo). En cambio si avanzo al mes actual (marzo) si me aparece con un circulo el dia actual.
Mi pregunta es, o mis preguntas son:
   
Porque aparece marcado febrero aun en el MV?,  pensaba yo que podia ser la ultima fecha seleccionada, pero no, porque use hoy el programa y marqué otra fecha y al salir y cargar de nuevo siempre me marca ese dia.

Y la otra pregunta:

Hay alguna forma de hacer que aparezca destacado el dia actual en el MV?  , no me refiero al marcado con ciruclo, si no el "destacado".


Eso, espero alguien tenga alguna idea de lo que hablo aajja.

Saludos, y gracias de ante mano!!

PD: en el Form_Load() hago MonthView.Refresh, pero parece que no ayuda.
#9
Hola a todos, saludos;
He venido a molestar de nuevo, pero es que en verdad no se me da lo de las consultas xD, es por eso que he venido a solicitar vuestra ayuda :D!!

Lo que quiero hacer es lo siguiente,

Tengo una base de datos en Access (*.mdb) en la que tengo 3 columnas donde esta la información que quiero rescatar, las columnas son las siguientes y se componen de los siguientes datos. (obviamente no los escribiré todos o me faltaría foro xD)


Material Des_Material                         EAN
30201         PAN CORRIENTE KILO                 30201
1342            ABASTERO VACUNO NACI KG                 EAN_NOT_FOUND
1364            ABASTERO VACUNO CAT U GRANEL 1 KG 87168


La tabla se compone de esa forma, hay Materiales que son iguales a los EAN y otros no, y hay EAN en donde no hay datos pero se representan como "EAN_NOT_FOUND" (para no dejar el espacio en blanco)

Lo que hago yo en el programa es ingresar un numero (Material o EAN) en un InputBox y ahi me busca el material con la siguiente consulta

Código (vb) [Seleccionar]

MaterialSAP = InputBox("Ingrese Material SAP", "Ingreso Mermas")
 
    mirec.Open "SELECT * FROM CllDB WHERE material = " & (MaterialSAP) & " ", mibd, adOpenKeyset, adLockOptimistic
   
    If mirec.RecordCount > 0 Then ' verifico si encontro registro
        des_material.ForeColor = &H8000& ' cambio el color de la letra si lo encontro
        des_material.Caption = mirec!des_material ' muestro la descripcion del material en el label des_material
        mirec.Close
     Else
        If mirec.RecordCount = 0 Then ' si no encontro nada
            des_material.ForeColor = &HFF& ' cambio el color a rojo
            des_material.Caption = "MATERIAL NO ENCONTRADO" ' y muestro esto.
            mirec.Close
     End If
    End If


Si encontró el producto, me muestra el nombre del material (des_Material) y si no, muestra "MATERIAL NO ENCONTRADO".

Pero ahora si, lo que necesito es lo siguiente (es un poco complicado de explicar).

Por ejemplo, si yo ingreso el siguiente numero: 87168 que me muestre el material 1364 y la descripción del material, pero si ingreso un numero y no esta en la columna EAN que busque en la columna "Material" y muestre el valor encontrado, pero si no existe en ninguna de las dos columnas que muestre "material no encontrado" y que la variable (MaterialSAP) quede con el valor ingresado.

Se entiende? xD, en verdad tengo la idea en mi mente, pero no se como llevarla a consulta, ya que como dije mas arriba soy realmente malo para las consultas complicadas xD!!. Es por eso que he venido aca a pedir ayuda, a ver si a alguien se le ocurre algo :D!!..

Eso, espero algun alma bondadosa me pueda ayudar con este tema que me esta quebrado la cabeza xD!

Saludos, y gracias de ante mano!!

#10
Hola, saludos,
 
  He venido a solicitar ayuda con un código que me esta quebrando la cabeza xD.
  El tema es que tengo un programa para digitar pedidos de materiales, tengo todo listo, excepto la parte donde copio los datos del List1 al porta papeles, he probado muchos códigos pero ninguno parece funcionar.

Este es el codigo:

Código (vb) [Seleccionar]

Private Sub CopiarOC_Click()
Dim strList As String
Dim i As Integer
For i = 0 To Me.List1.ListCount - 1
If Len(Trim(Me.List1.List(i))) > 0 Then
    strList = strList & Trim(Me.List1.List(i)) & " "
End If
Next i
Dim MyData As DataObject
Set MyData = New DataObject ' he aqui el error T_T
MyData.Clear
MyData.SetText Trim(strList)
MyData.PutInClipboard
End Sub


El problema con el código es que me da el error siguiente:


Error de compilación,
El uso de la palabra clave New no es valido.


Pensaran que programar en VB6 es arcaico, pero tengo todo listo, solo me falta eso y no he podido solucionarlo, y he venido para ver si me pueden guiar :).-

De igual forma he probado añadiendo los items a un archivo .txt y copiarlos desde ahi, pero creo que es poco útil si de igual forma los tendré en el listbox.


Espero alguien me pueda ayudar. Saludos y gracias de ante mano :D
#11
Scripting / [AYUDA] Ejecutar Script Bash
21 Agosto 2011, 03:20 AM
Hola a todos, estoy inciandome en el mundo de Linux con Ubuntu :D, pero tengo un problema con un script que quiero ejecutar al inicio del sistema.

el Script solo contiene lo siguiente :

Código (bash) [Seleccionar]

#!/bin/bash
sudo mount -t vboxsf library /home/francisko/Library_comp


Traté de que el sistema corriera el script al inicio con el gestor de "Aplicaciones al inicio", pero no pasa nada, la carpeta no se monta.

Entonces hice este script (que no creo que este bien hecho xD) pero no se ejecuta con doble clic xDDD. Y desde el terminal cuando me muevo al escritorio y coloco Ejecutar.sh (así se llama el archivo) me dice

"orden no encontrada"

Entonces mi pregunta es:

Como puedo hace para que la carpeta se monte al inicio del sistema, ó, como puedo hacer para poder correr bien el script (independiente si es al inicio o no) ?

De ante mano muchas gracias por cualquier respuesta. Saludos:D
#12
Hola, saludos :D!

En esta ocacion vengo a preguntar como puedo hacer algo.

Tengo un script (de hecho es uno de los de Leo) para contar las lineas de un archivo de texto. Que porsupuesto funciona perfecto. Pero lo que quiero hacer es que me vaya motrando la sumatoria de las lineas de texto.

El script es este:

Código (dos) [Seleccionar]

@echo off
set /a contador=0
for /f "" %%x in (CLLDB.CSV) do (
call :contador %%x

)
echo Lineas : %contador%
pause>nul
goto:eof
:contador
set /a contador+=1
goto:eof


El problema es que solo muestra la suma final. Y yo quiero que se vaya mostrando la suma, onda 1 2 3 4 5 hasta 10041 o los que tenga el archivo xD.

Probé con colocar:

Código (dos) [Seleccionar]

ECHO %contador%

Código (dos) [Seleccionar]

ECHO %%x


El primero dentro y fuera del FOR, y el segundo obviamente solo dentro del FOR.

Pero o me muestran solo "0" o el texto de las lineas.


Si alguien fuera tan amable de ayudarme porfavor.

De ante mano muchas gracias, Saludos.
#13
Hola, saludos :D XD

Hago este tema para preguntar como copiar el contenido de un Archivo .TXT al portapapeles de Windows. Nada mas que eso xD.

Busque en en la Web y encontré un par de formas sobre como hacerlo, pero la de copiar "desde" IExplorer no me sirve porque pregunta a cada rato si quiero copiar al portapapeles y no me sirve xD. El de Word.Aplicattion (o algo así), tampoco porque no sé como aplicarlo a mi código.

Tengo el código listo, solo me falta eso.

El archivo lo almaceno en "C:\Pedido_Digitado.txt"


Por favor si alguien me puede ayudar se los agradeceía mucho.

Atento a sus comentarios.

Saludos.

Aca lo que llevo. Intente con SendKeys pero por alguna razon no funciona y tampoco me tira ningun error.

Código (vb) [Seleccionar]
'Dim i
set Wss=CreateObject("WScript.Shell")
Set objfso = createobject("scripting.filesystemobject")
Set objshell = createobject("wscript.shell")
Set PedidoDigitado = objfso.createtextfile("C:\Pedido_Digitado.txt",True) 'creamos el archivo
'For i=1 To 10 Step 1
CodSAP = InputBox("Ingrese Codigo SAP", "CARRO LLENO", "Cod SAP")
CantMat = InputBox("Ingrese Cantidad", "CARRO LLENO", "Cantidad")
PedidoDigitado.writeline CodSAP & " " & CantMat
'Next
PedidoDigitado.close

Set ObjFsoTwo = CreateObject("Scripting.FileSystemObject")
Set ArchivoACopiar = ObjFso.OpenTextFile("C:\Pedido_Digitado.txt",1,True)
Wss.SendKeys "^e"
Wss.SendKeys "^c"
ArchivoACopiar.Close
MsgBox "Pedido Copiado.-" & vbCrLf & "Genere Orden de Compra.-", vbInformation, "CARRO LLENO -> INFORMACIÓN"



Saludos y gracias de ante mano ;D!
#14
Scripting / [VBS]Ayuda, consejos
3 Junio 2011, 05:10 AM
Hola, a todos estoy empezando en VBS y quiero hacer que un programa me pregunte dos datos y los vaya copiando en un TXT.

Eso lo hago, pero el problema es que necesito que llegue a DIEZ y cuando sea diez me diga que esta listo y copie los datos el porta papeles.

Lo que llevo

Código (vb) [Seleccionar]

Set objfso = createobject("scripting.filesystemobject")
Set objshell = createobject("wscript.shell")
Set PedidoDigitado = objfso.createtextfile("C:\Pedido_Digitado.txt",True) 'creamos el archivo
CodSAP = InputBox("Ingrese Codigo SAP", "CARRO LLENO", "Cod SAP")
CantMat = InputBox("Ingrese Cantidad", "CARRO LLENO", "Cantidad")
PedidoDigitado.writeline CodSAP & " " & CantMat
PedidoDigitado.close


Me guie por la guia de Novlucker.

Ojala alguien me pueda decir como lo hago, o me diga donde buscar.


Muchas gracias de ante mano.

Atento a sus comentarios.

Saludos
#15
Estimados, espero no molestar, pero quisiera saber como puedo pasar una lista como la siguiente a un MSGBOX en .VBS

Des_Proveedor 
ABASTECEDORA DEL COMERCIO LTDA. 
AGROSUPER COMERCIALIZ.DE ALIMENTOS 
ALIMENTOS Y FRUTOS S.A. 
CECINAS CHILLAN LTDA. 
CERVECERA CCU CHILE LTDA 
CMPC TISSUE S.A. 
COMERCIAL CCU S.A 
COMERCIAL SANTA ELENA S.A. 
DISTRIBUIDORA SAN MIGUEL DE ARICA 
EMBOTELLADORA CHILENAS UNIDAS S.A 
EVERCRISP SNACK PROD.CHILE.SA. 
MASTERFOODS CHILE LTDA. 
MOLINERA TEMUCO SCHEID LTDA. 
NESTLE CHILE S.A. 
PORTAL DEL SUR LIMITADA 
PRODUCTOS FERNANDEZ S A 
PROMASA      LTDA 
RABIE S.A. 
RODOLFO HARWARDT RABENKO 
SANTA CRUZ . 
SOC.INVERSIONES LA MUNDIAL LTD 
SURLAT INDUSTRIAL S.A. 
UNILEVER CHILE S.A. 
VINA SAN PEDRO TARAPACA S.A 
SOC.LACTEOS TINGUIRIRICA LTDA. 


La lista NUNCA va a ser la misma.

Esperando me puedan ayudar, me despide agradeciendo de ante mano cualquier ayuda :)
#16
Hola, (de nuevo u.u), saludos.

Os vengo a molestar de nuevo porque ahora si que no sé que pasa o porque pasa lo que me pasa XDDDDD

Lo que pasa ( xDD ) es que tengo el siguiente trozo de script que por alguna razon no funciona como debería.

Código (CarroLleno.bat)
Código (dos) [Seleccionar]
:DIGITAR_PEDIDO
TITLE DIGITAR PEDIDO&CLS
ECHO.
SET "PRODUCTO_="
SET "CANTIDAD_P="
SET /P "PRODUCTO_=Producto: "
IF NOT DEFINED PRODUCTO_ (ECHO.&ECHO. Ingrese producto.-&ECHO.&PAUSE >NUL 2>&1&GOTO :DIGITAR_PEDIDO)
IF /I "%PRODUCTO_%"=="copiar" (
CLIP.exe < PEDIDO_DIGITADO_.txt
GOTO :INICIO
)
SET /P "CANTIDAD_P=Cantidad: "
IF NOT DEFINED CANTIDAD_P (ECHO.&ECHO. Ingrese Cantidad.-&ECHO.&PAUSE >NUL 2>&1&GOTO :DIGITAR_PEDIDO)
SET "ESPACIO_= "
ECHO %PRODUCTO_%%ESPACIO_%%CANTIDAD_P%>> PEDIDO_DIGITADO_.txt
GOTO :DIGITAR_PEDIDO


Entonces el problema es el siguiente;
Por ejemplo si digito lo siguiente:

Producto : 178282
Cantidad : 1


Escribe solo 178282.

Pero si escribo;

Producto : 178282
Cantidad : 10


Escribe los valores como corresponde (que es como yo quiero que quede en el .txt):

178282 10

En definitiva, solo "escribe" los valores de la variable si son mayores a 9.
Si pongo por ejemplo el codigo de escritura asi:

Código (dos) [Seleccionar]

ECHO %PRODUCTO_%>> PEDIDO_DIGITADO_.txt
ECHO %CANTIDAD_P%>> PEDIDO_DIGITADO_.txt


Ocurre exactamente lo mismo.

Estoy corriendo el script en Windows XP SP3 (por si es relevante :S)

PD: La variable %ESPACIO_% es necesaria, porque el contenido lo copio a SAP y SAP me pide ese espacio, si no, copia mal los datos.

Espero alguien me pueda ayudar, ya que no tengo idea porque pasa eso si no hago ninguna operación.

No llamo variables ni datos de otra parte del código.

Por favor, necesito saber como puedo solucionar esto o porque pasa por lo menos xDDD


Saludos y muchas gracias de ante mano :)
#17
Buenas :D;

Tal como dice el titulo del tema, estoy buscando alguna utilidad para copiar el contenido de un archivo de texto al portapapeles, pero por linea de comandos obviamente.

No se si habra alguna utilidad, o algun script para hacer esto?

Probé con :


Test.txt > Clipbrd.exe


Pero no funcionó xD!!!

En fin, muchas gracias por cualquier ayuda =)
#18
Estimados, buenas :D xD

Espero me puedan ayudar con esto, es super simple (la pregunta xD) pero no se me ocurre como hacerlo.

Lo que pasa es que tengo un Script que me muestra los proveedores a los que tengo que hacerles pedido segun el dia que le consulte, el problema es que me genera algo como lo siguiente :


Des_Proveedor
3M CHILE S.A.
3M CHILE S.A.
ABASTECEDORA DEL COMERCIO LTDA.
ABASTECEDORA DEL COMERCIO LTDA.
ABASTECEDORA DEL COMERCIO LTDA.
ABASTECEDORA DEL COMERCIO LTDA.
ABASTECEDORA DEL COMERCIO LTDA.
ABASTECEDORA DEL COMERCIO LTDA.
ABASTECEDORA DEL COMERCIO LTDA.
ABU GOSCH ZONA FRANCA
ABU GOSCH ZONA FRANCA
ABU GOSCH ZONA FRANCA
ABU GOSCH ZONA FRANCA
ABU GOSCH ZONA FRANCA
ABU GOSCH ZONA FRANCA
ABU GOSCH ZONA FRANCA
ABU GOSCH ZONA FRANCA
ABU GOSCH ZONA FRANCA
ADELCO CHILLAN
ADELCO CHILLAN
ADELCO CHILLAN
ADELCO CHILLAN
ADELCO CHILLAN
AGROCOMERCIAL CODIGUA LTDA.
AGROCOMERCIAL CODIGUA LTDA.
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS
AGROSUPER COMERCIALIZ.DE ALIMENTOS


Obviamente no voy a colocar los mas de 2000 registros que contiene el .txt xD

Bueno al grano, quisiera saber como puedo hacer para procesar el archivo y que reduzca a 1 sola vez el nombre del proveedor xD? se entiende?. O sea que en vez que AGROSUPER salga 50 veces, salga una vez.

Necesito que sea una sola vez por proveedor porque quiero mostrar por pantalla los proveedores por dia, pero seria un poco engorroso mostrarlos todos xD.

El objetivo del script es ayudarme a ordenar las compras. Lo haria en una planilla Excel, pero me mata otros datos que necesito vizualizar.

Sin otro particular y esperando me puedan ayudar. Me despido. Saludos ;D!
#19
Estimados, junto con saludarlos acudo a uds para resolver un problema que me tiene un poco loco XDD

A ver, lo que pasa es que tengo que trabajar con dos archivos:
Uno llamado CarroLleno.csv (archivo delimitado por "," (comas)) que uso como "base de datos"
Y el otro llamado Carrolleno.bat, que es el que me ayuda a consultar en la BD según corresponda.
Por ejemplo esto es un extracto del archivo CarroLleno.csv (ya que contiene mas de 8000 registros xD)

EAN;PLU_SAP60;Descripcion;Rut_Proveedor;Des_Proveedor;Lunes;Martes;Miercoles;Jueves;Viernes;Sabado
8021684555824;321432;ESPONJA DE BANO BEBE UND;936260004;3M CHILE S.A.;x;;x;;x;
21200510045;402220001;GUANTE MULTIUSO SCOTH BRITE, SMALL;936260004;3M CHILE S.A.;x;;x;;x;
7804629990178;556701;CEREAL XTRONGER HOMBRE 30gr TRIBALANCE;843487009;ABASTECEDORA DEL COMERCIO LTDA.;x;;;;;
7804520985693;9807;PALMITO ENTERO 400GR HORTELANA;843487009;ABASTECEDORA DEL COMERCIO LTDA.;x;;;;;
7804520155102;215770;CHUNO DELICADO 500 GRS;843487009;ABASTECEDORA DEL COMERCIO LTDA.;x;;;;;
7805750356741;202362;RACUMIN CEBO PASTA BAYER.;843487009;ABASTECEDORA DEL COMERCIO LTDA.;x;;;;;
7790387110234;10664;YERBA MATE C/PALO TARAGUI 500GR;843487009;ABASTECEDORA DEL COMERCIO LTDA.;x;;;;;
7790387110159;10665;YERBA MATE TARAGUI 1000 GR;843487009;ABASTECEDORA DEL COMERCIO LTDA.;x;;;;;
7790387110319;211158;YERBA MATE C/PALO TARAGUI 250GR;843487009;ABASTECEDORA DEL COMERCIO LTDA.;x;;;;;
7730114000582;223143;ARROZ G2 GRANO LARGO YEN KILO;856412008;ABU GOSCH ZONA FRANCA;x;;;;;
7790150375655;264649;CALDO P/SAB.GALLINA      40   GR;856412008;ABU GOSCH ZONA FRANCA;x;;;;;
7790150376652;264651;CALDO P/SAB.VERDURA      40   GR;856412008;ABU GOSCH ZONA FRANCA;x;;;;;
6001120071158;141232;MARSHMALLOWS BLANCO BEACON 150 GRS;856412008;ABU GOSCH ZONA FRANCA;x;;;;;
7798100661452;230850;TOMATES CUBET.C/ALBAHACA 1 KG.;856412008;ABU GOSCH ZONA FRANCA;x;;;;;


Y acá el codidgo del batch


@Echo Off&Title Carro Lleno v1.0&Color A
:Inicio
Echo.
Cls
SET /P "Material=Ingrese EAN o Material a buscar: "

FOR /F "Tokens=1-11 Delims=;" %%A IN ('Type CarroLleno.csv ^|Find.exe /I "%Material%"') DO (
ECHO.
ECHO EAN PRINCIPAL : %%A
ECHO MATERIAL : %%B
ECHO TEXTO BREVE : %%C
ECHO RUT PROVEEDOR : %%D
ECHO PROVEEDOR : %%E
ECHO LUNES : %%F
ECHO MARTES : %%G
ECHO MIERCOLES : %%H
ECHO JUEVES : %%I
ECHO VIERNES : %%J
ECHO SABADO : %%K
)
PAUSE
GOTO :Inicio


Lo que hace básicamente es buscar según EAN o MATERIAL lo que yo le consulte.
Como verán el archivo CarrLleno.csv se divide en: EAN;PLU_SAP60;Descripcion;Rut_Proveedor;Des_Proveedor;Lunes;Martes;Miercoles;Jueves;Viernes;Sabado

El problema está en los días donde puedo pedir ese producto, porque se almacenan con una "X" los dias en los que puedo hacer un pedido de compras.

Por ejemplo si consulto el primer Producto que tiene pedido los días Lunes, Miercoles y Viernes me muestra algo como lo siguiente



Pero esta mal porque me sale que puedo pedir Lunes, Martes, y Miercoles, cuando deberian salir las "X" en los dias Lunes, Miercoles y Viernes.

Entonces mi pregunta es la siguiente:

¿como puedo hacer para que el programa me muestre las X en los días que corresponde?

Se me imagina que son FOR parecido al mio, pero no se me ocurre (que triste xDD) como delimitar esos parámetros o como "cuadrarlo" (por llamarlo de alguna forma) con los días que corresponde.

De ante mano muchas gracias por la ayuda, atento a sus comentarios y seguerencias se despide Atte.

Francisco.
#20
Hola Saludos a todos! :

Que fome estar molestando de nuevo, pero es que no me resulta un código y no sé porque :S, les voy a explicar un poco para ver si alguien me puede ayudar T_T:

A ver tengo un archivo llamado plu.txt que contiene datos como los siguientes :


000145,       000145, 0,   2499, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN MANZANA FAMILIAR,SUPER TOTTAL
000146,       000146, 0,      0, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN MIGA (STROISSER),SUPER TOTTAL
000147,       000147, 0,   2990, 0,000000,0,  5,  0,       0,1,0,0,PIE DE LIMON FAMILIAR,SUPER TOTTAL
000148,       000148, 0,   2499, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN DURAZNO SUPER TOT,SUPER TOTTAL
000149,       000149, 0,   1299, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN ALEMAN,SUPER TOTTAL
000150,       000150, 0,      0, 0,000000,0,  5,  0,       0,1,0,0,QUEQUE INGLES MEDIANO,SUPER TOTTAL

(solo pegué unos pocos ya que son cientos de lineas :S)

Cada linea del archivo de "identifica" por el código PLU que está antes de la primera "coma" (,).
Lo que yo necesito es modificar el valor "5" que está antes de la octava coma de un PLU (codigo) especifico.

Por ejemplo debo modificar el valor 5 del codigo 000148:

Tengo el txt así:

000145,       000145, 0,   2499, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN MANZANA FAMILIAR,SUPER TOTTAL
000146,       000146, 0,      0, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN MIGA (STROISSER),SUPER TOTTAL
000147,       000147, 0,   2990, 0,000000,0,  5,  0,       0,1,0,0,PIE DE LIMON FAMILIAR,SUPER TOTTAL
000148,       000148, 0,   2499, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN DURAZNO SUPER TOT,SUPER TOTTAL
000149,       000149, 0,   1299, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN ALEMAN,SUPER TOTTAL
000150,       000150, 0,      0, 0,000000,0,  5,  0,       0,1,0,0,QUEQUE INGLES MEDIANO,SUPER TOTTAL


Y me tiene que quedar así


000145,       000145, 0,   2499, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN MANZANA FAMILIAR,SUPER TOTTAL
000146,       000146, 0,      0, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN MIGA (STROISSER),SUPER TOTTAL
000147,       000147, 0,   2990, 0,000000,0,  5,  0,       0,1,0,0,PIE DE LIMON FAMILIAR,SUPER TOTTAL
000148,       000148, 0,   2499, 0,000000,0,  25,  0,       0,1,0,0,KUCHEN DURAZNO SUPER TOT,SUPER TOTTAL
000149,       000149, 0,   1299, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN ALEMAN,SUPER TOTTAL
000150,       000150, 0,      0, 0,000000,0,  5,  0,       0,1,0,0,QUEQUE INGLES MEDIANO,SUPER TOTTAL


Después de intentar varias cosas he llegado hasta el siguiente código, pero no me funciona como yo quiero porque me modifica todas las lineas y yo solo necesito hacerlo en las que yo le diga al code :S, he aquí el código:

Código (dos) [Seleccionar]

@Echo Off
SetLocal EnableDelayedExpansion
Set /P "Plu=Ingrese Plu :"

For /F "Tokens=1,9 Delims=,[] Skip=2" %%f In ('Find "%plu%" plu.txt /n') Do (
Set "Linea=%%f"
Set "dato=%%g"
)

For /F "Tokens=* Delims=" %%x In ('Type plu.txt') Do (
Set Linea=%%x
Set Linea=!Linea:%dato%=  25!
Call :Show !Linea!
)
Pause

:Show
Echo %* >> SalidaPLU.txt

Goto :Eof


Pero no sé porque no me funciona D:

Espero que alguien me pueda ayudar, ya que son varias las lineas que debo modificar, y no siempre van a ser las mismas :S.


De ante mano muchas gracias

Se despide y saluda atte
Francisco.

PD: El formato del archivo siempre es el mismo, comas espacios y eso xD.
PD2: Ya me leí el tema "acciones sobre archivos de texto" de leo, de hecho gracias a ese tema he conseguido mi code xD
#21
Hola y saludos a todos :) :


Bueno tengo un problema más bien del tipo estético con mi pequeño script :).
Lo que pasa es que tengo un bat que me escanea las unidades USB en busca del archivo autorun.inf (cuando esté terminado el code lo subiré), y tambien le quita atributos a todos los archivos y sub carpetas en la memoria USB usando el siguiente comando ...

Código (dos) [Seleccionar]
ATTRIB -R -S -H "%M_Usb%\*.*" /S /D >Nul 2>&1

Ahí no hay problema, ya que el comando funciona bien, pero lo que me gustaría hacer es que se vayan mostrando los archivos a los que le voy quitando los atributos, o sea que por ejemplo me muestre mientras de ejecute el comando la ruta completa y el nombre del archivo, por ejemplo :

F:\Nueva Carpeta\Fotos\Foto001.jpeg
F:\Codigos\Batch\Abcd.bat


y así ...


Espero que se entienda y que me puedan ayudar, porque a mi se me ocurre que con FOR se podría hacer algo, pero nada me resulta ya que for es mi talón de aquiles xD.-


Saludos y Gracias de ante mano :D!!!
#22
Scripting / [DUDA][BATCH] Con la funcion CECHO :S
29 Diciembre 2009, 23:55 PM
Hola Saludos a todos, espero esten bien :)

En este mismo subforo encontré una función llamada CECHO que es capaz de colorear las palabras en un archivo .bat.-

A Ver el codigo de esa funcion es el siguiente :

Código (dos) [Seleccionar]
:::::::::::::::::::::::::::::::::::::::::::::::::::::
REM  Modulo Generador de Colores
:CECHO
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
PUSHD "%USERPROFILE%\"
IF EXIST COLOR DEL /F /Q /A COLOR > NUL 2>&1
IF EXIST COLOR\ RD /S /Q COLOR > NUL 2>&1
MD COLOR
CD COLOR

SET "C="
SET "L1="
SET "L2="
SET "L3="

SET "C=%~1"
ECHO.!C!|FINDSTR /R /I "\<[0-9A-F][0-9A-F]\>" > NUL || (
ECHO. DEBE ESPECIFICARSE UN COLOR HEXADECIMAL.
ECHO. COLOR /?
EXIT /B 1
)
SET /A "TAM=0"
SET "L1=%~2"
SET "L2=%~3"
SET "L3=%~4"
IF NOT DEFINED L2 (
SET "L1="
SET "L2=%~2"
SET "L3="
)
CALL :CLEAN C
CALL :CLEAN L1
CALL :CLEAN L2
CALL :CLEAN L3
IF DEFINED L2 CALL :LEN "%L2%"
IF %TAM% GTR 150 (
ECHO.
ECHO.TEXTO COLOREADO REDUCIDO A 150 CARACTERES DE LONGITUD
ECHO.
)
IF DEFINED L2 SET "L2=%L2:~0,150%"
IF DEFINED L2 ECHO.%L3%>"%L2%"
0>NUL SET /P "_=%L1%"
FINDSTR.EXE /A:%C% /R "^" "*"
POPD
IF EXIST "%USERPROFILE%\COLOR" DEL /F /Q /A "%USERPROFILE%\COLOR" > NUL 2>&1
IF EXIST "%USERPROFILE%\COLOR\" RD /S /Q "%USERPROFILE%\COLOR" > NUL 2>&1


:LEN
SETLOCAL ENABLEEXTENSIONS DISABLEDELAYEDEXPANSION
SET /A CONTL=0
SET "WORDL=%~1"
:_LOOPL
IF NOT DEFINED WORDL (GOTO :_ENDL)
SET "WORDL=%WORDL:~1%"
SET /A CONTL +=1
GOTO :_LOOPL
:_ENDL
ENDLOCAL & SET /A TAM=%CONTL%
EXIT /B 0


:CLEAN
::deja solo caracteres dentro del rango a-z 0-9
::y espacio en el contenido de las variables.
::version 2.0
::Version modificada con mas caracteres
::solo para trabajar con funcion cecho.
::Los caracteres agregados son: # $ + - =   @
::Recibe un parametro con el nombre de la variable
::que se quiere filtrar su contenido.
::Ejemplo:
::call :clean nombreDeMiVariable
::autores: Matt Alvariz , Carlos
 @SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
 @SET "V=%*"
 @SET "S=!%V%!"
 @IF NOT DEFINED S EXIT /B 1
 @SET "V="
:LOOP
 @FOR %%* IN (
" " 0 1 2 3 4 5 6 7 8 9 A B C D E F G
H I J K L M N O P Q R S T U V W X Y Z
# $ + - =   @
) DO   @IF /I "!S:~0,1!" EQU "%%~*" SET "V=!V!!S:~0,1!"
 @SET "S=!S:~1!"
 @IF DEFINED S GOTO :LOOP
 @(ENDLOCAL & SET %*=%V%)
 @SETLOCAL ENABLEEXTENSIONS
 @EXIT /B 0
REM Fin modulo generador de colores
 ::::::::::::::::::::::::::::::::::::::::::::::::::::


y se usa de la siguiente forma:

Código (dos) [Seleccionar]
Call :Cecho ColorHexaDecimal "Mi Frase a colorear"


por ejemplo :

Código (dos) [Seleccionar]
Call :Cecho 7C "Mi Nombre es Francisco xD"

pero por ejemplo si "ejecuto" ese codigo en un batch, al final de cada frase salen dos puntos ":" y nose como se pueden quitar, ya que se ven fuera de lugar segun la frase que uno está utilizando :S, y esa es mi duda ¿Como puedo hacer para que no salgan los ":" al final de cada frase o palabra?


Muchas Gracias de ante mano y espero me pueda ayudar.

Saludos :)!
#23
Hola soy yo de nuevo, y necesito su ayuda T_T!

En un post que hice hace poco preguntaba como saber el numero de linea en donde encontraba una coincidencia de texto, y gracias a su ayuda logré hacerlo,
me muestra el numero de linea donde encontró la coincidencia y el caracter que necesito reemplazar, pero es en esta parte donde tengo el problema, ya que después de leer el tema de "acciones sobre archivos de texto" (de Leo Guitierrez) encontré una pequeña función que me permite reemplazar la palabras por otras :), pero (siempre tiene que haber un pero u.u) no me reemplaza en la linea en que yo necesito que lo haga, sino que lo hace en todas :/.. por ejemplo:

Tengo un archivo que contiene las siguientes lineas de texto (solo pondré unas cuantas ya que son miles :B)


000145,       000145, 0,   2499, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN MANZANA FAMILIAR,SUPER TOTTAL
000146,       000146, 0,      0, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN MIGA (STROISSER),SUPER TOTTAL
000147,       000147, 0,   2990, 0,000000,0,  5,  0,       0,1,0,0,PIE DE LIMON FAMILIAR,SUPER TOTTAL
000148,       000148, 0,   2499, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN DURAZNO SUPER TOT,SUPER TOTTAL


en donde lo que necesito reemplazar es los numeros 5 despues de la 7º "coma"

por ejemplo tomando las misma lineas anteriores si yo quisiese reemplazar el "5" del producto 000146
deberia quedar asi



000145,       000145, 0,   2499, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN MANZANA FAMILIAR,SUPER TOTTAL
000146,       000146, 0,      0, 0,000000,0,  25,  0,       0,1,0,0,KUCHEN MIGA (STROISSER),SUPER TOTTAL
000147,       000147, 0,   2990, 0,000000,0,  5,  0,       0,1,0,0,PIE DE LIMON FAMILIAR,SUPER TOTTAL
000148,       000148, 0,   2499, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN DURAZNO SUPER TOT,SUPER TOTTAL


pero cuando uso lo que llevo hasta ahora queda asi


000145,       000145, 0,   2499, 0,000000,0,  25,  0,       0,1,0,0,KUCHEN MANZANA FAMILIAR,SUPER TOTTAL
000146,       000146, 0,      0, 0,000000,0,  25,  0,       0,1,0,0,KUCHEN MIGA (STROISSER),SUPER TOTTAL
000147,       000147, 0,   2990, 0,000000,0,  25,  0,       0,1,0,0,PIE DE LIMON FAMILIAR,SUPER TOTTAL
000148,       000148, 0,   2499, 0,000000,0,  25,  0,       0,1,0,0,KUCHEN DURAZNO SUPER TOT,SUPER TOTTAL


Acá esta el código que llevo hasta el momento:

Código (dos) [Seleccionar]

@echo off
:: Encontrar PLU
set /p plu=ingrese plu y wea :

For /F "Tokens=1,9 Delims=,[] skip=2" %%f In ('Find "%plu%" plu.txt /n') Do (
Set "linea=%%f"
Set "dato=%%g"
REM echo.Numero de linea: %%f  -  Dato: %%g
)

echo %linea%
echo %dato%

echo reemplazando espere....
setlocal enabledelayedexpansion
for /f "tokens=* delims=" %%x in ('type plu.txt') do (
set linea=%%x
set linea=!linea:%dato%=  25!
call :show !linea!
)
pause
:show
echo %* >> SalidaPLU.txt
goto:eof


pero como les digo antes solo necesito que me reemplace el numero "5" por "25" a los códigos que yo le diga, osea, yo ingreso un PLU (la primera linea con numero por ej. 000145), encuentra el numero de linea en el que está el PLU y solo me reemplaza el 5 por el 25, pero como se darán cuenta no se como hacerlo T_T


si algún alma bondadosa me puede ayudar le estaré agradecido for ever *O*!!!


muchas gracias de ante mano y saludos.-
#24
Hola Saludos, hace tiempo que no molestaba, pero nada es para siempre xD, pero necesito ayuda en algo u.u:

Lo que pasa es que en el trabajo voy a tener que ir cambiando unos valores a un archivo txt generado por un sistema, el archivo SIEMPRE se llama Plu.txt. El archivo esta compuesto por miles de lineas como la siguiente


000145,       000145, 0,   2499, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN MANZANA FAMILIAR,SUPER TOTTAL
000146,       000146, 0,      0, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN MIGA (STROISSER),SUPER TOTTAL


Donde :
cada valor se divide por una "," (coma), con un for legré ubicar el numero que necesito editar, en este caso son los "5" despues de la octava "coma", pero ahora necesito saber en que numero de linea está ese "5",
intente con la funcion que dice el numero de lineas que tiene el txt, pero eso no me sirve ya que para editar esa linea lo voy a hacer con edlin.

Código (dos) [Seleccionar]
@echo off
:: Encontrar PLU
set /p plu=ingrese plu :

For /F "Tokens=8 Delims=," %%f In ('Type "plu.txt" ^| Find "%plu%"') Do (echo %%f)
Pause
EXIT


ese es el for que me muestra el numero 5 xD.-


espero que alguien me pueda ayudar ya que estos trabajos los tengo que hacer antes de irme del trabajo y se hace muy largo hacerlo manualmente, porque tengo que ir viendo codigo por codigo u.u



SAludos y muchas gracias de ante mano !!!

#25
Hola Yo De Nuevo u.u...... tengo una duda dudosa xD, se puede hacer una compracion  si una variable está vacía dentro de un FOR ?  Ej:

Código (dos) [Seleccionar]

For /F "Tokens=1,2 Delims=;" %%f In ('Type "Listado_Clientes.csv" ^| Find "%Rut_Cliente%"') Do (
If "%%f"=="" (Echo.&Echo Cliente No Encontrado.-&Pause >Nul 2>&1& Goto :BuscarClientes)
Echo.
Echo Rut Nombre cliente
Echo %%f %%g
Pause >Nul 2>&1
Goto :BuscarClientes
)


Por ejemplo ahí después de hacer el FOR en el archivo, quiero saber si la variable quedó vacía o no, para así poder saber si existe o no el cliente en el archivo, pero no hace la comparación u.u y solo me da los dos pauses  :-\, también probé con:

Código (dos) [Seleccionar]

For /F "Tokens=1,2 Delims=;" %%f In ('Type "Listado_Clientes.csv" ^| Find "%Rut_Cliente%"') Do (
If Not "%%f"=="" (
Echo.
Echo Rut Nombre cliente
Echo %%f %%g
Pause >Nul 2>&1
Goto :BuscarClientes
) ELSE (
Echo.&Echo Cliente No Encontrado.-&Pause >Nul 2>&1& Goto :BuscarClientes
)
)


Pero ahí si que se cae el código xD, entonces ..... mi pregunta es ...

¿Cómo puedo saber si la variable %%f está vacía?, o ¿Cómo saber si no se encontró el cliente?


..........


Muchas Gracias de ante mano y saludos  :-[ :-[
#26
Hola Buenas a Todos, para variar tengo una duda :S o mejor dicho necesito ayuda T_T,

a ver en el trabajo me pidieron que hiciera un programa para agregar clientes, solo el RUT y el nombre del cliente en una planilla de excel (yo lo estoy haciendo en archivos .csv), ya tengo todo eso, se como ir almcenandolos y todo, pero a la hora de poder filtrarlos no me resulta, por ejemplo tengo la siguiente planilla:


Listado Clientes Super Tottal;
Rut Cliente;Nombre Cliente
17.132.109-3;Francisco Javier Jaque Caroca
10.111.115-9;Alejandra saddssda
5.555.555-5;hola

(si copian y pegan el texto en un archivo .txt, lo renombran a .csv y lo abren veran que se van almacenando en columnas y celdas separadas)
Entonces por ejemplo necesito filtrar solo el cliente que tenga el rut 17.132.109-3, pero no me resulta, supongo que se hace con For, es por eso que despues de varios intentos llegue al siguiente FOR:

Código (dos) [Seleccionar]

for /f "tokens=* delims=;" %%x in (Listado_Clientes.csv ^| findstr.exe /n "17.132.109-3") do (echo %%x)


pero me muestra todo el contenido del archivo, y por ejemplo solo necesito que me muestre algo asi


Rut                  Nombre Cliente
17.132.109-3    Francisco Javier Jaque Caroca


Pero como dije antes no me resulta, si alguien fuese tan amable y me pudiese ayudar o por lo menos orientar en como se hace ?, definitivamente los FOR no son algo que yo pueda entender xD.-


Saludos y Gracias De Ante Mano.-
#27
Scripting / [BATCH]Diccionario
29 Septiembre 2009, 03:48 AM
Hola A Todos, esta vez no vengo a preguntar, solo a aportar un pequeño "diccionario" para que codifiquen sus códigos (valga la redundancia), esta desde la "a" a la "z" y del "0" al "9", no incluí mayúsculas porque no sé si batch las diferencia (voy a probar), no es gran cosa es solo por si a alguien le sirve.


Set "KingBoo=abcdefghijklmnopqrstuvwxyz1235467890"
Set "a=%KingBoo:~0,1%"
Set "b=%KingBoo:~1,1%"
Set "c=%KingBoo:~2,1%"
Set "d=%KingBoo:~3,1%"
Set "e=%KingBoo:~4,1%"
Set "f=%KingBoo:~5,1%"
Set "g=%KingBoo:~6,1%"
Set "h=%KingBoo:~7,1%"
Set "i=%KingBoo:~8,1%"
Set "j=%KingBoo:~9,1%"
Set "k=%KingBoo:~10,1%"
Set "l=%KingBoo:~11,1%"
Set "m=%KingBoo:~12,1%"
Set "n=%KingBoo:~13,1%"
Set "o=%KingBoo:~14,1%"
Set "p=%KingBoo:~15,1%"
Set "q=%KingBoo:~16,1%"
Set "r=%KingBoo:~17,1%"
Set "s=%KingBoo:~18,1%"
Set "t=%KingBoo:~19,1%"
Set "u=%KingBoo:~20,1%"
Set "v=%KingBoo:~21,1%"
Set "w=%KingBoo:~22,1%"
Set "x=%KingBoo:~23,1%"
Set "y=%KingBoo:~24,1%"
Set "z=%KingBoo:~25,1%"
Set "UNO=%KingBoo:~26,1%"
Set "DOS=%KingBoo:~27,1%"
Set "TRES=%KingBoo:~28,1%"
Set "CUATRO=%KingBoo:~29,1%"
Set "CINCO=%KingBoo:~30,1%"
Set "SEIS=%KingBoo:~31,1%"
Set "SIETE=%KingBoo:~32,1%"
Set "OCHO=%KingBoo:~33,1%"
Set "NUEVE=%KingBoo:~34,1%"
Set "CERO=%KingBoo:~35,1%"


Uso: Por Ejemplo Quiere Codificar La Palabra "Hola", sería algo así:
Por ejemplo si la palabra hola fuese una contraseña:


@Echo Off
Set "KingBoo=abcdefghijklmnopqrstuvwxyz1235467890"
Set "Pez=%KingBoo:~7,1%"
Set "Caja=%KingBoo:~14,1%"
Set "Oferta=%KingBoo:~11,1%"
Set "Cien=%KingBoo:~0,1%"

Set /p "clave= Ingrese Clave: "
If ["%clave%"]==["%Pez%%Caja%%Oferta%%Cien%"] (Echo.&Echo Bien!&Pause&Goto :Eof) Else (Echo.&Echo Mal!&Pause&Goto :Eof)



Donde Pez = h
Caja = o
Oferta = l
y Cien = a

Eso Saludos  y Espero que a alguien le sea util ^^
#28
Scripting / [SOLUCIONADO][BATCH]Funcion Valida Rut
19 Septiembre 2009, 18:07 PM
Hola a Todos, espero me puedan ayudar en esta ocacion T_T...
Estoy haciendo un programita, en donde cada persona debe entrar con su RUT (Registro Único Tributario.CHILE), pero necesito verificar si el RUT de la persona esta bien escrito o es real,  para eso existe una funcion llamada "Funcion Valida Rut", a mi me la pasaron en Vb6.0, no es muy complicada, pero parece que en batch si xD...

Explico un poko como se valida un RUT...

Por ejemplo tengo los 8 primeros digitos del RUT 11.222.333-?, lo que hace la funcion es extraer desde atras para adelante los 8 primeros digitos y multiplicarlos por numeros específicos por ejemplo:



    1   1   2   2   2   3   3   3  
  * 3   2   7   6   5   4   3   2
  --------------------------------------
    3   2  14  12  10  12   9   6

Los Resultados se Suman y eso da un total

3 + 2 + 14 + 12 + 10 + 12 + 9 + 6 = 68

Despues ese resultado se divide por 11

68 : 11 = 6
2

(El resultado con decimales seria 6,1818181818181818181818181818182, que se aproxima a 2)
EL "RESTO" de la operación se le resta a 11 en este caso seria:

11- 2 = 9


Donde 9 seria el Dígito verificador del RUT.

Ahora, ya se como extraer los primeros 8 numeros que ingresa al usuario, multiplicarlos cada uno, y sumarlos (definitivamente no es para nada dificil hacerlo :)), pero estoy parado en la parte de la division, porque batch solo hace division por numeros enteros, en la division solo me daria el resultado el 6 mas no asi el 2 que es el numero que yo necesito para poder restarlo a 11.-

busque en San Google divisiones con decimales en batch y encontre un par, incluso uno de este foro, pero no supe como adaptarlos a mi code, ademas eran muy largos (con justificada razon supongo, aunque me da lo mismo si es largo o no el code D:) para poder entender lo que hacen, ademas tengo que aproximar la cifra: "6,1818181818181818181818181818182" (tomo el resultado del ejemplo anterior, obviamente esto puede variar) a 2 (se toma del ejemplo anterior), o por lo menos saber el "RESTO" de la operacion como numero entero para poder restarlo a 11, pero ese es mi gran problema, que nose como hacerlo :S, ademas no existe en batch (que yo sepa) una funcion como el "MID" en VB6.0.-

Espero que alguien me pueda ayudar porfavor T_T.-!

De ante mano muchas gracias por las respuestas.-

#29
Hola de nuevo a todos, espero que esten bien ^^*

bueno aca estoy tratando de hacer un bat que me ayude con unos archivos que necesitos editar..

a ver voy a a tratar de explicarme lo mejor posible

yo trabajo con varios archivos .xml que contienen un contenido (valga la redundancia ) como el siguiente

<?xml version="1.0" encoding="UTF-8"?>
<list>
<skill id="301" levels="5" name="Summon Big Boom" enchantLevels1="30">
 <table name="#enchantNpcIds"> 14707 14708 14709 14710 14711 14712 14713 14714 14715 14716 14717 14718 14719 14720 14721 14722 14723 14724 14725 14726 14727 14728 14729 14730 14731 14732 14733 14734 14735 14736 </table>
 <enchant1 name="npcId" val="#enchantNpcIds"/>
 <table name="#mpConsume"> 74 82 88 94 100 </table>
 <table name="#itemConsumeCount"> 3 3 4 4 5 </table>
 <set name="mpConsume" val="#mpConsume"/>
 <set name="itemConsumeId" val="1458"/>
 <set name="itemConsumeCount" val="#itemConsumeCount"/>
 <set name="itemConsumeIdOT" val="1458"/>
 <set name="itemConsumeCountOT" val="5"/>
 <set name="itemConsumeSteps" val="4"/>
 <set name="summonTotalLifeTime" val="1200000"/>
 <set name="summonTimeLostIdle" val="500"/>
 <set name="summonTimeLostActive" val="1000"/>
 <set name="target" val="TARGET_SELF"/>
 <set name="reuseDelay" val="5000"/>
 <set name="hitTime" val="6000"/>
 <set name="skillType" val="SUMMON"/>
 <set name="isMagic" val="true"/>
 <set name="operateType" val="OP_ACTIVE"/>
 <!-- Summon-specific -->
 <table name="#npcIds"> 14702 14703 14704 14705 14706 </table>
 <set name="npcId" val="#npcIds"/>
 <set name="expPenalty" val="0.3"/> <!-- 30 percent of acquired Exp will be consumed. -->
 <table name="#ench1expPenalty"> 0.28 0.26 0.24 0.22 0.20 0.18 0.16 0.14 0.12 0.10 0.08 0.06 0.04 0.02 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </table>
 <enchant1 name="expPenalty" val="#ench1expPenalty"/>
</skill>
<skill id="302" levels="9" name="Spoil Festival" enchantLevels1="30" enchantLevels2="30">
 <table name="#enchantMagicLvl"> 76 76 76 77 77 77 78 78 78 79 79 79 80 80 80 81 81 81 82 82 82 82 83 83 83 84 84 85 85 85 </table>
 <enchant1 name="magicLvl" val="#enchantMagicLvl"/>
 <enchant2 name="magicLvl" val="#enchantMagicLvl"/>
 <table name="#magicLvl"> 28 36 43 49 55 62 66 70 74 </table>
 <table name="#mpConsume"> 73 93 113 131 150 172 183 194 204 </table>
 <table name="#ench12Power"> 0 1 2 2 3 4 4 5 6 6 7 8 8 9 10 10 11 12 12 13 14 14 15 16 16 17 18 18 19 20 </table>
 <set name="mpConsume" val="#mpConsume"/>
 <set name="magicLvl" val="#magicLvl"/>
 <set name="target" val="TARGET_AREA"/>
 <set name="skillRadius" val="200"/>
 <set name="reuseDelay" val="3000"/>
 <set name="hitTime" val="1800"/>
 <set name="lvlDepend" val="1"/>
 <set name="skillType" val="SPOIL"/>
 <set name="operateType" val="OP_ACTIVE"/>
 <set name="isDebuff" val="true"/>
 <set name="castRange" val="40"/>
 <set name="effectRange" val="400"/>
 <enchant1 name="power" val="#ench12Power"/>
 <enchant2 name="power" val="#ench12Power"/>
 <for>
   <effect name="Spoil" val="0"/>
 </for>
 <enchant1for>
   <effect name="Debuff" time="15" val="0" stackOrder="23" stackType="attack_time_up">
     <mul order="0x30" stat="pAtkSpd" val="0.77"/>
   </effect>
 </enchant1for>
 <enchant2for>
   <!-- Retail Values CT2.3: 118HP * 3 Sec -->
   <effect count="5" name="DamOverTime" time="3" val="354"/>
 </enchant2for>
</skill>
</list>

los archivos son mucho mas largos, osea su contenido, solo coloque una porcion del mismo para no hacer tan largo el post...
en fin lo que quiero hacer es lo siguiente, yo necesito editar una linea de cada mmmmm a ver como llamarlo..."SKILL"
llamese "SKILL" al contenido que esta dentro de <skill> y </skill> , por ejemplo la linea que necesito editar es la siguiente
 <set name="target" val="TARGET_AREA"/>
y lo que necesito cambiar de esa linea es la frase "TARGET_AREA", por lo que io le diga (al code xD)
por ejemplo

"TARGET_AREA"
por
"TARGET_PARTY"

(obviamente sin las comillas ^^)
pero nose como hacerlo para no cambiar el demas contenido del los archivos...
a todo esto los archivos esta nombrados de la siguiente forma dentro de la carpeta
por ejemplo

10001-10025.xml
10369-20558.xml

y asi (son varios archivos).
Pero obviamente nose como hacerlo, es por eso que les pido su ayuda, da lo mismo en que lenguaje sea, lo ideal seria batch porke es de lo que entiendo mas (aunque no lo crean :xD), es que io creo que debe ser con un FOR pero no son mi fuerte :xD!!

Esperando que me puedan ayudar se despide atte

Francisko

SAludos y mucha gracias de ante mano
#30
Scripting / [BATCH]No me Funiona este FOR xD
25 Mayo 2009, 04:38 AM
Hola Saludos,

Bueno soy yo de nuevo, siento molestarlos, pero necesito ayuda, los FOR definitivamente no son mi fuerte xD

Bueno en fin mi problema e el siguiente:
Tengo un programa que me genera IDS de hardware, lo uso para genrear el ID de las USB que tengo conectadas mi pc ^^!,  redirigo la salida de la consulta a un archivo txt y hasta ahí todo bien, lo que pasa es que el programa me genera una salida como esta:

USBSTOR\DISK&VEN_KINGSTON&PROD_DATATRAVELER_2.0&REV_PMAP\5B831D000335&0
    Name: Kingston DataTraveler 2.0 USB Device
    Hardware ID's:
        USBSTOR\DiskKingstonDataTraveler_2.0PMAP
        USBSTOR\DiskKingstonDataTraveler_2.0
        USBSTOR\DiskKingston
        USBSTOR\KingstonDataTraveler_2.0P
        KingstonDataTraveler_2.0P
        USBSTOR\GenDisk
        GenDisk
    Compatible ID's:
        USBSTOR\Disk
        USBSTOR\RAW
1 matching device(s) found.

Pero io necesito usa solo la primera línea que viene después de "Hardware ID's:" que es la que me srive para lo que quiero hacer xD, en fin la cosa es que estuve TRATANDO de usar un FOR y llegue hasta el siguiente FOR


for /f "tokens=1" %%L in ('devcon hwids USBSTOR^\^* ^| find /i "USBSTOR\Disk"') do (set usb=%%L)

Pero el problema es que me muestra todas las coincidencias para "USBSTOR\DISK", y obviamente al mostrar el contenido de la variable "%usb%" me va a mostrar "USBSTOR\Disk", aunque si el FOR lo ejecuto desde CMD y no desde un batch, SI va almacenando los datos que necesito, pero me toma el ultimo :xD!!.....
Mi pregunta es simple, como puedo hacer para obtener el contenido de la primera línea después de "Hardware ID's:"? (en batch por supuesto, si es que se puede :X), independiente de que haya mas de una ID de hardware en el archivo? (en el caso de que hubiesen conectadas de usb al PC)....

De ante mano muchas gracias y eh aquí el programa que estoy usando para obtener las ids de hardware.

http://www.4shared.com/file/107573496/c9c9de30/devcon.html

ahi esta el programa por si alguien lo kiere, solo lo decomprimen, trae version para 32 y 64bits

Ayuda de consola del dispositivo:
devcon.exe [-r] [-m:\\<equipo>] <comando> [<arg>...]
-r, si se especifica, reiniciará el equipo cuando se haya completado el comando, si es necesario.
<equipo> es el nombre del equipo de destino.
<comando> es el comando que se va a realizar (vea abajo).
<arg>... es uno o más argumentos, si el comando lo requiere.
Para ver ayuda sobre un comando concreto, escriba: devcon.exe help <comando>
classfilter          Permite la modificación de filtros de clase.
classes              Muestra todas las clases de configuración de dispositivos.
disable              Deshabilita los dispositivos que coinciden con el hardware o
                       el Id. de instancia específico.
driverfiles          Muestra los archivos de controlador instalados para los dispositivos.
drivernodes          Muestra todos los nodos de controlador de dispositivos.
enable               Habilita los dispositivos que coinciden con el hardware o
                       el Id. de instancia específico.
find                 Busca dispositivos que coinciden con el hardware o
                       el Id. de instancia específico.
findall              Busca dispositivos, incluyendo aquellos que no están presentes.
help                 Muestra esta información.
hwids                Muestra los Id. de hardware de los dispositivos.
install              Instala manualmente un dispositivo.
listclass            Muestra todos los dispositivos para una clase de configuración.
reboot               Reinicia el equipo local.
remove               Quita los dispositivos que coinciden con el hardware o
                       el Id. de instancia específico.
rescan               Analiza si hay hardware nuevo.
resources            Muestra los recursos de hardware de los dispositivos.
restart              Reinicia los dispositivos que coinciden con el hardware o
                       el Id. de instancia específico.
stack                Muestra la pila de controladores esperada de los dispositivos.
status               Muestra el estado de ejecución de los dispositivos.
update               Actualiza manualmente un dispositivo.
UpdateNI            Actualiza manualmente un dispositivo sin preguntar al usuario
SetHwID              Agrega, elimina y cambia el orden de los Id. de hardware de los dispositivos enumerados por el raíz.
 

Comandos de DevCon de ejemplo
devcon -m:\\prueba find pci\*

Muestra todos los dispositivos PCI conocidos del equipo prueba. (Si utiliza -m puede especificar un equipo de destino. Debe utilizar comunicación entre procesos (IPC) para tener acceso al equipo.)

devcon -r install %WINDIR%\Inf\Netloop.inf *MSLOOP

Instala una nueva instancia del adaptador de bucle invertido de Microsoft. Creará un nuevo nodo de dispositivo enumerado por el raíz con el que puede instalar un "dispositivo virtual", como el adaptador de bucle invertido. Este comando también reinicia silenciosamente el equipo si se requiere un reinicio.

devcon classes

Muestra todas las clases de instalación conocidas. El resultado contiene el nombre corto no adaptado (por ejemplo, "USB") y el nombre descriptivo (por ejemplo, "Controladoras de bus serie universal").

devcon classfilter upper !filtro1 !filtro2

Elimina los dos filtros especificados.

devcon classfilter lower !filtromalo +filtrobueno

Reemplaza "filtromalo" con "filtrobueno".

devcon driverfiles =ports

Muestra los archivos asociados a cada dispositivo en la clase de instalación ports.

devcon disable *MSLOOP

Deshabilita todos los dispositivos cuyo Id. de hardware termina en "MSLOOP" (incluyendo "*MSLOOP").

devcon drivernodes @ROOT\PCI_HAL\PNP0A03

Muestra todos los controladores compatibles para el dispositivo ROOT\PCI_HAL\PNP0A03. Puede utilizarse para determinar por qué se eligió un archivo de información de dispositivo integral (.inf), en lugar de utilizar un archivo .inf de otro proveedor.

devcon enable '*MSLOOP

Habilita todos los dispositivos cuyo Id. de hardware es "*MSLOOP". La comilla simple indica que se debe tomar literalmente el Id. de hardware (es decir, el asterisco ["*"] es realmente un asterisco; no es un carácter comodín).

devcon find *

Muestra instancias de todos los dispositivos que están presentes en el equipo local.

devcon find pci\*

Muestra todos los dispositivos de interconexión de componentes periféricos (PCI) conocidos que hay en el equipo local (este comando supone que un dispositivo es PCI si su Id. de hardware tiene como prefijo "PCI\").

devcon find =ports *pnp*

Muestra los dispositivos presentes que son miembros de la clase de instalación ports y que contienen "PNP" en su Id. de hardware.

devcon find =ports @root\*

Muestra los dispositivos presentes que son miembros de la clase de instalación ports y que están en la rama "raíz" del árbol de enumeración (el Id. de instancia tiene "root\" como prefijo). Tenga en cuenta que no debe hacer ninguna suposición mediante programación acerca del formato de un Id. de instancia. Para determinar los dispositivos raíz, puede examinar sus bits de estado de dispositivo. Esta característica está incluida en DevCon como ayuda para la depuración.

devcon findall =ports

Muestra los dispositivos "no presentes" y los dispositivos que están presentes para la clase ports. Esto incluye los dispositivos que se han quitado, los dispositivos que se han desplazado de una ranura a otra y, en algunos casos, los dispositivos que se han enumerado de manera diferente debido a un cambio del BIOS.

devcon listclass usb 1394

Muestra todos los dispositivos que están presentes para cada clase indicada (en este caso, USB y 1394).

devcon remove @usb\*

Quita todos los dispositivos USB. Los dispositivos que se quitan se muestran con su estado de eliminación.

devcon rescan

Vuelve a explorar si hay nuevos dispositivos Plug and Play.

devcon resources =ports

Muestra los recursos utilizados por todos los dispositivos de la clase de instalación ports.

devcon restart =net @'ROOT\*MSLOOP\0000

Reinicia el adaptador de bucle invertido ROOT\*MSLOOP\0000. La comilla simple del comando indica que el Id. de instancia se debe tomar literalmente.

devcon hwids=mouse

Muestra todos los Id. de hardware de los dispositivos de la clase mouse del sistema.

devcon sethwid @ROOT\LEGACY_BEEP\0000 := beep

Asigna el Id. de hardware, beep, al dispositivo de beep heredado.

devcon stack =ports

Muestra la pila de controladores esperada para el dispositivo. Esto incluye los filtros superior/inferiores de dispositivo y clase, y el servicio de control.

devcon status @pci\*

Muestra el estado de cada dispositivo presente cuyo Id. de instancia comienza con "pci\".

devcon status @ACPI\PNP0501\1

Muestra el estado de una instancia de dispositivo concreta, en este caso un puerto serie enumerado por Configuración avanzada e interfaz de energía (ACPI).

devcon status @root\rdp_mou\0000

Muestra el estado de Microsoft Terminal Server o el controlador de mouse de Servicios de Terminal Server.

devcon status *PNP05*

Muestra el estado de todos los puertos COM.

devcon update midev.inf *pnp0501

Actualiza todos los dispositivos que coinciden con el ID. de hardware *pnp0501 para que utilicen el mejor controlador de Midev.inf que esté asociado al Id. de hardware *pnp0501.

Nota
Esta actualización obliga a todos los dispositivos a utilizar el controlador de Midev.inf, incluso aunque ya haya una mejor coincidencia en el sistema. Esto es útil cuando desea instalar nuevas versiones de controladores durante el desarrollo antes de obtener una firma. La actualización sólo afecta a los dispositivos que coinciden con el Id. de hardware especificado; no afecta a los dispositivos secundarios. Si el archivo .inf especificado no está firmado, Windows puede mostrar un cuadro de diálogo en el que le pida confirmación para instalar el controlador. Si se requiere un reinicio, se informa de ello y DevCon devuelve un error de nivel 1. Si especifica -r, se realizará un reinicio automáticamente si se requiere uno.

Notas
DevCon devolverá un nivel de error para su uso en secuencias de comandos:
"0" indica un éxito.
"1" indica que se requiere un reinicio.
"2" indica un error.
"3" indica un error de sintaxis.
Si especifica -r y se requiere un reinicio, el reinicio se realizará sin ninguna advertencia después de que se hayan procesado todos los dispositivos.
Si especifica -m:\\equipo y el comando no funciona para un equipo remoto, se informará de un error.
DevCon admite caracteres comodín en los Id. de instancia para mayor comodidad interactiva. No dé por supuesto nada acerca del formato de un Id. de instancia de un equipo a otro y de una versión del sistema operativo a otra.
Volver al principio

--------------------------------------------------------------------------------

La información de este artículo se refiere a:
Microsoft Win32 Device Driver Kit for Windows 2000
Microsoft Windows XP Driver Development Kit
Microsoft Windows NT 2003 Driver Development Kit
Volver al principio
Palabras clave:   kbfile kbhowto KB311272

Volver al principio  ¿Necesita más ayuda?Contactar con un profesional de soporte técnico por correo electrónico, online o por teléfono
Seleccione idioma
AlemánÁrabeChecoChinoEslovenoFrancésGriegoHebreoHolandésHúngaroInglés (US)ItalianoJaponésPolacoPortugués (Brasil)Portugués (Portugal)RomanianRusoTaiwanésTurco   
Herramientas
Imprimir la página
Enviar esta página



¿Necesita más ayuda?
Contactar con un profesional de soporte técnico por correo electrónico, online o por teléfono
Ayuda y soporte Contrato de Servicios
Contáctenos | Condiciones de uso | Marcas registradas | Declaración de privacidad
   
©2009 Microsoft 

esa es la documentacion del programa
#31
hola a todos, saludos!! ^^

Mi problema es el siguiente, lo que pasa es que he estado tratando de hacer un code en batch que me ayude a evitar que mi PC (y el de otros también, si es que me resulta)se infecte con el virus "Autorun.inf", tengo un code bastante bueno, que me detecta si hay pendrives conectadas al PC (Gracias Leo Gutiérrez por ese FOR xD), si las hay les quita los atributos de "Sistema" y "Oculto" a todos los archivos que sean necesarios, además me avisa si hay un archivo llamado "Autorun.inf" en la unidad detectada, y si es así, lo mueve a un carpeta que se llama "VIRUS_BORRAR", hasta ahí todo bien, solo lo ejecuto cuando conecto una usb el PC y listo, ahora el problema es que este archivo siempre viene acompañado de un ejecutable de nombre aleatorio y de extensión aleatoria como por ejemplo:


juyta.exe
ouyae.pif ó
gvaefo.cmd


Estos nombres siempre están "escritos" en el archivo Autorun.inf

En una línea como esta:


SHEll\EXPlorE\cOMmand= juyta.exe
SHEll\EXPlorE\cOMmand = ouyae.pif
SHEll\EXPlorE\cOMmand =gvaefo.cmd


El problema es que como se ve en el ejemplo nunca son iguales las líneas, el signo "=" nunca esta en el mismo lugar, aunque lo demás si como el "SHEll\EXPlorE\cOMmand", solo el signo "=" va cambiando de lugar....

Ahora lo que yo quiero hacer (y que he tratado de todas formas pero no me ha resultado), es saber el nombre del archivo que viene después del signo "=", ya sea de extensión .pif, .cmd ó .exe, para así poder mover el archivo del pendrive a una carpeta que el usuario pueda eliminar después, o simplemente que lo elimine ^^*!
He probado con for, con findstr, pero no me resulta, además no soy muy bueno para usar el for xD!, también he mirado alguno ejemplos de otro tipo de scripts en el foro, pero no me ha resultado, es por eso que estoy haciendo el post, para ver si alguno de Uds. me puede ayudar a solucionar esto....

Espero haberme explicado lo mejor posible... si hay alguna duda por favor postear ;D!!!!!!!!!

Saludos y muchas gracias de ante mano ^^!

Aqui dejo el codigo del programa (de lo que llevo hasta el momento :))
@echo off
TITLE OWNED Autorun.inf v2.1 by Francisko ^^^^
COLOR 1E
IF EXIST %temp%\menushow.bat (DEL %temp%\menushow.bat)
CALL :Primera
CALL %temp%\menushow.bat
echo.
echo _________________________________________________
echo Buscando Memorias Usb's Conectadas al PC ........
echo _________________________________________________
for /f "tokens=1" %%x in ('wmic logicaldisk get caption^, description ^| find /i "extra"') do ( SET mem=%%x)
IF NOT DEFINED mem CALL:ERRORE
ECHO Memorias Usb' conectadas al PC ^:
echo "%mem%"
echo wscript.sleep "1500" > %temp%\timer1.vbs
cscript /nologo %temp%\timer1.vbs
echo _________________________________________________
echo.
Echo Quitando Atributos...
echo _________________________________________________
attrib -r -s -h %mem%\*.* /S /D
ECHO _________________________________________________
echo.
echo Buscando Archivo "Autorun.inf" porfavor espera....
echo wscript.sleep "1250" > %temp%\timer1.vbs
cscript /nologo %temp%\timer1.vbs

IF EXIST "%mem%\Autorun.inf" (
Echo Existe un Archivo llamado "Autorun.inf" en "%mem%"...
echo wscript.sleep "1500" > %temp%\timer1.vbs
cscript /nologo %temp%\timer1.vbs
echo.
Echo Moviendo archivo a carpeta VIRUS_BORRAR
CD /D%mem%
MKDIR VIRUS_BORRAR
move /-Y Autorun.inf %mem%\VIRUS_BORRAR
echo wscript.sleep "1500" > %temp%\timer1.vbs
cscript /nologo %temp%\timer1.vbs
) ELSE (
GOTO :MISTAKE )

echo.
ECHO Todos los comando completados con exito!!
echo wscript.sleep "2000" > %temp%\timer1.vbs
cscript /nologo %temp%\timer1.vbs

start "" /max explorer.exe %mem%
CALL:SALIRE

:ERRORE
echo.
echo No se encontraron Memorias Usb's Conectadas al PC....
echo wscript.sleep "2000" > %temp%\timer1.vbs
cscript /nologo %temp%\timer1.vbs
CALL:SALIRE

:MISTAKE
echo.
echo El Archivo Autorun.inf no existe en "%mem%\" ^:D!!
echo wscript.sleep "2000" > %temp%\timer1.vbs
cscript /nologo %temp%\timer1.vbs
start "" /max explorer.exe %mem%
call:SALIRE

:Primera
echo echo. >>%temp%\menushow.bat
echo echo                 ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» >>%temp%\menushow.bat
echo echo                 º                                            º >>%temp%\menushow.bat
echo echo                 º           OWNED Autorun.inf v2.1           º >>%temp%\menushow.bat
echo echo                 º                    by                      º >>%temp%\menushow.bat
echo echo                 º                 Francisko!                 º >>%temp%\menushow.bat
echo echo                 º                                            º >>%temp%\menushow.bat
echo echo                 ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ >>%temp%\menushow.bat
goto :eof

:SALIRE
echo.
echo Terminado.
echo wscript.sleep "1150" > %temp%\timer1.vbs
cscript /nologo %temp%\timer1.vbs
exit


espero que me puedan ayudar ^^, no creo que sea muy complicado, pero a mi no me funciona xDDDD


saludos =)!
#32
Hola!! :D!, leyendo otro post me acorde que tengo un pequeño codigo para mostrar todos los archivos ocultos y con atributos de "archivos de sistema" que estan alojados en el pendrive, y que cuando vamos a abrir el pendrive se ejecuta el tan odiado virus "Autorun.inf" (no se como se llamara en realidad, pero io le digo asi xD)... bueno menos letras eh aki el codigo =)

@echo off
TITLE OWNED - Autorun.inf v1.1
COLOR 1E
IF EXIST %temp%\menushow.bat (DEL %temp%\menushow.bat)
CALL :Primera
CALL %temp%\menushow.bat
echo.
echo _________________________________________________
echo Buscando Memorias Usb's Conectadas al PC ........
echo _________________________________________________
for /f "tokens=1" %%x in ('wmic logicaldisk get caption^, description ^| find /i "extra"') do (
IF "%%x"=="" (GOTO :ERRORE)
echo _________________________________________________
echo.
Echo Quitando Atributos...
attrib -r -s -h %%x\*.* /S /D
echo _________________________________________________

start "" /max explorer.exe %%x
)
:SALIRE
echo Terminado.
ping -n 1 0.0.0.0 >nul
exit /b 0

:Primera
echo echo. >>%temp%\menushow.bat
echo echo                 ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» >>%temp%\menushow.bat
echo echo                 º                                            º >>%temp%\menushow.bat
echo echo                 º           OWNED Autorun.inf v1.1           º >>%temp%\menushow.bat
echo echo                 º                    by                      º >>%temp%\menushow.bat
echo echo                 º                 Francisko!                 º >>%temp%\menushow.bat
echo echo                 º                                            º >>%temp%\menushow.bat
echo echo                 ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ >>%temp%\menushow.bat
goto :eof

:ERRORE
echo No se encontraron Memorias Usb's Conectadas
CALL:SALIRE


lo que hace el codigo el detectar todas las memorias usb conectadas al computador con el primer FOR (gracias a Leo Gutierres por ese for xD), y despues que las detecta les kita todos los atributos a todos los archivos en el pendrive y a todos los archivos en todas las carpetas del pendrive :)

solo lo guardan y cada vez que conecten un pendrive al pc en vez de darle a abrir hacen doble click en el batch y el batch hace todo ^^ y se evitan futuros problemas ;D!!!!!


Saludos y espero que a alguien le sirva....
#33
Hola Buenas a todos ^^*!

tengo el siguiente problema con este codigo:

@echo off
:: Detectar las memorias USB actualmente montadas, y abrir una ventana
:: con la USB detectada :
ECHO Buscando ubs conectadas... por favor espera...
for /f "skip=1" %%x in ('wmic logicaldisk get caption') do (
for /f "tokens=1" %%c in ('fsutil fsinfo drivetype %%x ^| find /i "extra"') do (
ECHO Quitando Atributos a los archivos en tu pendrive .....
attrib -r -h -s %%c\*.* /S /D >> %%c\archivos.txt
explorer /e,/root,%%c
)
)
exit /b 0

Lo que haces es detectar las usb conectada y abrir una ventana de explorer, y kitar los atributos de oculto, de solo lectura y de sistema a todos los archivos del pendrive, pero eso no es el problema, lo que pasa es que cuando me abre la ventana de explorer el "programa" queda detras de la  ventana y no se cierra hasta que cierro la venta del pendrive... tonces nose porke pasa eso, y yo no quiero que quede el programa corriendo mientras uso el pendrive....

busque este codigo para evitar que se me infecte el pc con un virus que se aloja en las pendrives e infecta los discos duros cuando uno le da doble click, me ha pasado dos veces y con esto lo ejecuto antes de abrir el pendrive para ver si el virus esta y borrarlo, porke es bastante molesto y no deja ver los archivos ocultos y no deja abrir los discos duros mediante el doble click y eso me apesta xD

les estaria muy agradecido si alguien me puede ayudar .... espero haberme explicado bien ^^


saludos y gracias de ante mano :)

:)


(el codigo de los FOR esta hecho por un usuario de aca que esta con un gatito en su cama :xD, no recuerdo el nombre :xD )
#34
Scripting / [DUDA] For para matar procesos
18 Enero 2009, 03:31 AM
Hola!! saludos a todos!!!


Miren tengo el siguiente problema... yo trabajo en un cybercafe, en donde tengo 20 pcs funcionado casi perfecto... ahora el problema es el casi xD!, porke por ejemplo cuando un usuario termina de usar el pc y entra otro seguido y quiere abrir msn no puede porke se "acumulan" procesos de msn .....

por ejemplo cuando me dicen que no pueden abrir msn , voy, abro el admnistrador de tareas y veo minimo 20 msnmsgr.exe abriertos, pero el msn no se ve... la cosa es como puedo hacer para terminar esos procesos con un batch?, que lo ejecute y termine los procesos?...

yo se que se puede hacer con el comando taskkill , pero es que yo quiero que sea con un for , porke si por ejemplo copio el comando 10 veces en el batch y el proceso esta 15? tendria que ejecutarlo muchas veces, por eso creo que con un FOR se puede hacer, pero nunca entendi como usar el FOR D:!


si alguien me puede ayudar se lo agradeceria mucho!!!!!!




GRacias de ante mano ^^*!
#35
Scripting / [BATCH]Copiar carpetas en batch :D
21 Octubre 2008, 01:52 AM
Hola!  Saludos y espero que me puedan ayudar en mi problema
Lo que pasa es que estoy haciendo un pequeño programa  con batch para hacer respaldos de carpetas automáticamente, donde el usuario (si es la primera vez que lo usa ) ingresa la ruta de la carpeta que quiere respaldar, la ruta de la carpeta donde quiere  guardar el respaldo y el nombre con que se renombrara la carpeta respaldada, esto es solo una vez y la próxima vez que  el programa carga las rutas automáticamente, se muestra un menú principal con varias opciones...  y una de ellas obviamente es comenzar el respaldo.(el código no lo tengo ahora porke no estoy en mi casa, pero apenas pueda lo posteo para todos lo puedan usar ;D!) ya voy bastante avanzado, de hecho ahora solo estoy en la parte de añadir "efectos" al programa y es en uno de esos efectos que me he quedado pegado... cuando el usuario da a la opción respaldar  el programa muestra una pantalla que dice algo como "Respaldando archivos por favor espere" (con enmarcado y eso xD)... en esta parte uso el comando xcopy de esta manera
Xcopy %rutaentrada% %rutasalida%/CARPETATEMP  /S >%temp%/respaldo.txt
Donde la variable %rutaentrada% contendria la ruta de la carpeta a respaldar, %rutasalida% que contendria la ruta donde copiar el respaldo
Y en el archivo respaldo.txt va guardando los archivos que se copian:
Por ejemplo
C:/juegoxd/system.dll
Por dar el ejemplo de un archivo, obviamente son muchos mas...
Esto lo hago para que no se vean las rutas completas, por que a mi gusto no se ve bien xD o es molesto xD
Ahora lo que quiero hacer yo es que en vez de mostrar
"Copiando C:/juegoxd/system.dll"
Muestre algo como
Respaldando Archivo : System.dll
Que muestre solo el archivo y no la ruta completa y el archivo que se esta copiando, Y que cada vez que copie otro archivo diga lo mismo ó sea seria como:
Respaldando Archivo : System.dll
Respaldando Archivo : Alaaudio.dll

Pero no se como hacerlo, había pensado en usar un for pero no entiendo mucho el FOR xD!
Es por esa razón que posteo para saber si alguno de uds me puede ayudar o dar una idea de cómo se puede hacer....
Espero haberme explicado bien y gracias de ante mano.-
PD: el codigo lo voy a postear apenas pueda y en este mismo hilo :D! porque no tengo internet e mi casa u.u xD! (lo digo por el tiempo en que me pueda demorar en responder.)

Saludos y gracias de ante mano por al ayuda


Como lo prometido es deuda eh aca el code del miniprograma
@echo off
IF EXIST %temp%\creditos.bat (DEL %temp%\creditos.bat)
:Primera
echo echo. >>%temp%\creditos.bat
echo echo                 ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» >>%temp%\creditos.bat
echo echo                 º                                            º >>%temp%\creditos.bat
echo echo                 º        Respaldar Carpetas v5.5             º >>%temp%\creditos.bat
echo echo                 º                    by                      º >>%temp%\creditos.bat
echo echo                 º                 Francisko!                 º >>%temp%\creditos.bat
echo echo                 º                                            º >>%temp%\creditos.bat
echo echo                 ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ >>%temp%\creditos.bat
echo echo. >>%temp%\creditos.bat
echo echo. >>%temp%\creditos.bat

TITLE Cargando....
SET weno=ping -n 2 0.0.0.0
SET fecha=%date%
SET fechados=%date:/=-%
CLS
COLOR A
CALL:LOADER
echo Comprobando Archivo de Rutas...
%weno% >nul
IF NOT EXIST %temp%\rutascarptemp.txt (echo EL ARCHIVO NO EXISTE &pause&GOTO:CrearRutas) ELSE (echo Archivo OK)
%weno% >nul
:OTRAXD
IF NOT EXIST %temp%\respuesta.txt (CALL:MENUPRIN) ELSE (GOTO:MAAAAS)
:MAAAAS
ren %temp%\respuesta.txt *.bat
call %temp%\respuesta.bat
ren %temp%\respuesta.bat *.txt
IF %masvar%=="1" (GOTO:SEGUIR) ELSE (GOTO:MENUPRIN)
:principal
CLS
title Respaldar Carpetas v5.5 - Menu Principal Bienvenido: *-=+[%USERNAME%]+=-*
COLOR A
:MENUPRIN
title Respaldar Carpetas v5.5 - Menu Principal Bienvenido: *-=+[%USERNAME%]+=-*
COLOR A
CLS
call %temp%\creditos.bat
TITLE Menu Principal

echo [1].- Respaldar.
echo [2].- Cambiar Rutas.
echo [3].- Ver la Ayuda.
echo [4].- Ver Archivo de Rutas.
echo [5].- Automatizar el copiado.
echo.
echo NOTA : Ten en cuenta que se pueden generar dos carpetas, una con el nuevo
echo respaldo y una con el antiguo, asi que no respaldes carpetas o archivos demasiado grandes.
echo.
SET respuest=
SET /P respuest="Opcion: "
IF "%respuest%"=="" call :NADA
IF "%respuest%"=="1" call :CargarRutas
IF "%respuest%"=="2" call :CambiarRutas
IF "%respuest%"=="3" call:Ayuda
IF "%respuest%"=="4" call :VEAME
IF "%respuest%"=="5" (GOTO:PREGU) ELSE (GOTO principal)

IF EXIST %temp%\rutascarptemp.txt (GOTO CargarRutas) ELSE (GOTO CrearRutas)
:CrearRutas
COLOR A
CLS
call %temp%\creditos.bat
echo.
echo El Archivo donde se guardaran las Rutas de Respaldo no Existe,
echo O ah sido borrado...
echo.
echo Asi que debemos crear uno ^^^^
echo.
echo NO uses comillas para escribir los datos o el programa dara error
echo.
SET /P rutaentrada="Pega o Escribe la ruta de la carpeta que quieres respaldar: "
IF "%rutaentrada%"=="" GOTO error1
SET /P rutasalida="Pega o Escribe la ruta donde se guardara el respaldo: "
IF "%rutasalida%"=="" GOTO error1
IF "%rutaentrada%"=="%rutasalida%" GOTO FATALERROR
SET /P nomcarpsalida="Escribe el nombre que se le dara a la carpeta de respaldo: "
IF "%nomcarpsalida%"=="" GOTO error1
SET nomcarpsalida=%nomcarpsalida: =_%
echo.
echo @set rutaentrada="%rutaentrada%">> %temp%\rutascarptemp.txt
echo @set rutasalida="%rutasalida%">> %temp%\rutascarptemp.txt
echo @set nomcarpsalida="%nomcarpsalida%">> %temp%\rutascarptemp.txt
GOTO Principal
:SEGUIR
:CargarRutas
COLOR A
TITLE Cargando Rutas...
CLS
IF NOT EXIST %temp%\rutascarptemp.txt (GOTO CrearRutas)
cls
call %temp%\creditos.bat
echo Cargando Rutas porfavor espera...
echo.
%weno% >nul
cls
call %temp%\creditos.bat
echo Cargando Rutas porfavor espera...
echo.
echo °°°°°°°°°°°°
REN %temp%\rutascarptemp.txt *.bat
%weno% >nul
cls
call %temp%\creditos.bat
echo Cargando Rutas porfavor espera...
echo.
echo °°°°°°°°°°°°°°°°°°°°
call %temp%\rutascarptemp.bat
%weno% >nul
cls
call %temp%\creditos.bat
echo Cargando Rutas porfavor espera...
echo.
echo °°°°°°°°°°°°°°°°°°°°°°°°°°°° Listo!
ren %temp%\rutascarptemp.bat *.txt
%weno% >nul
IF NOT EXIST %rutaentrada% (GOTO NOEXISTE)
call:Respaldar

:Respaldar
TITLE Respaldando ...
cls
IF NOT EXIST %rutasalida% MD %RUTASALIDA%
CD /D%rutasalida%
IF Exist CARPETATEMP_OLD (RD /S /Q CARPETATEMP_OLD)
IF EXIST CARPETATEMP (REN CARPETATEMP CARPETATEMP_OLD)

MD CARPETATEMP

echo.
echo.
echo                 ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo                 º                                            º
echo                 º             Copiando Archivos              º
echo                 º             Porfavor Espera..              º
echo                 º                                            º
echo                 ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
echo.

xcopy %rutaentrada% %rutasalida%\CARPETATEMP /E > %temp%\respaldo.txt
GOTO:GETTOGETHER
:GETTOGETHER
TITLE LISTO!!! ^^^^
DEL %temp%\respaldo.txt
CD /D%rutasalida%
%weno% >nul
IF EXIST %nomcarpsalida% (ren %nomcarpsalida% %nomcarpsalida%_OLD)
IF EXIST %nomcarpsalida%_OLD (RD /S /Q %nomcarpsalida%_OLD)
%weno% >nul
echo Renombrando a %nomcarpsalida%...
%weno% >nul
ren CARPETATEMP %nomcarpsalida%
IF %ERRORLEVEL%==0 (GOTO:LISTOKO) ELSE (echo Ocurrio un fallo al renombrar la carpeta&pause&exit)
echo.
REM SET /P question="Deseas Renombrar tu carpeta %nomcarpsalida% a %nomcarpsalida%_%fechados%? [S/N]: "
REM IF "%question%"=="" (ECHO No has escrito nada, no se renombrara la carpeta a la fecha actual&GOTO:LISTOKO)
REM IF "%question%"=="S" GOTO SEDOS
REM IF "%question%"=="s" GOTO SEDOS
REM IF "%question%"=="N" GOTO NODOS
REM IF "%question%"=="n" GOTO NODOS

REM :SEDOS
REM IF EXIST %nomcarpsalida%_%fechados% (RD /S /Q %nomcarpsalida%_%fechados%)
REM ren %nomcarpsalida% %nomcarpsalida%_%fechados%
REM IF %ERRORLEVEL%==0 (GOTO:LISTOKO) ELSE (echo ocurrio un fallo al renombrar la carpeta&pause&exit)
REM GOTO:LISTOKO
REM :NODOS
REM GOTO:LISTOKO
:LISTOKO
ECHO Carpeta Respaldada Con Exito ^^^^, presiona un tecla para salir...
IF EXIST %temp%\creditos.bat (DEL %temp%\creditos.bat)
pause>nul
exit


:error1
echo msgbox "No has escrito nada %USERNAME%", 64, "Mensaje de Error"> %temp%\nada.vbs
start %temp%\nada.vbs
%weno% >nul
del %temp%\nada.vbs >nul
cls
CALL:CrearRutas

:CambiarRutas
echo.
ECHO Ahora borraras el archivo donde se guardan las rutas de copiado...
echo Presiona un tecla para continuar, si no quieres hacerlo cierra el programa...
pause >nul
DEL %temp%\rutascarptemp.txt
GOTO CrearRutas

:Ayuda
cls
mode con cols=85
mode con lines=38
TITLE AYUDA xD!
echo.
echo ÉÍÍÍÍÍÍÍÍÍÍ»
echo º Opcion 1:º
echo ºÍÍÍÍÍÍÍÍÍÍÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo º Empieza el proceso de respaldo de tu carpeta, siempre y cuando                  º
echo º hayas creado el archivo con las rutas de respaldo, si no has creado el archivo  º
echo º con las rutas de respaldo el programa te pedira crearlo automaticamente.        º
echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
echo.
echo ÉÍÍÍÍÍÍÍÍÍÍ»
echo º Opcion 2:º
echo ºÍÍÍÍÍÍÍÍÍÍÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo º Borras el archivo donde se guardan las rutas de copiado y          º
echo º Pasas crear el archivo de nuevo, con las nuevas rutas de respaldo. º
echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
echo.
echo ÉÍÍÍÍÍÍÍÍÍÍ»
echo º Opcion 3:º
echo ºÍÍÍÍÍÍÍÍÍÍÈÍÍÍÍÍÍÍÍÍÍÍ»
echo º Ves la ayuda xD! :B! º
echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
echo.
echo ÉÍÍÍÍÍÍÍÍÍÍ»
echo º Opcion 4:º
echo ºÍÍÍÍÍÍÍÍÍÍÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo º El programa te muestra un archivo con las rutas que has configurado previamente.  º
echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
echo.
echo ÉÍÍÍÍÍÍÍÍÍÍ»
echo º Opcion 5:º
echo ºÍÍÍÍÍÍÍÍÍÍÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo º Con esta opcion haces que el programa automaticamente comienzea a respaldar   º
echo º tu carpeta cada vez que lo ejecutes. (Ya no podras acceder el menu principal) º
echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
echo.
echo Presiona una tecla para volver al menu principal...
pause>nul
cls
GOTO principal

:FATALERROR
cls
CALL %temp%\creditos.bat
echo.
ECHO %USERNAME%: LA RUTA DE ENTRADA CON LA RUTA DE DESTINO SON LAS MISMAS!!!!
ECHO %USERNAME%: DEBES CAMBIAR UNA DE LAS RUTAS...
echo.
echo Presiona una tecla para volver a empezar!
pause>nul
cls
IF EXIST %temp%\rutascarptemp.txt (DEL %temp%\rutascarptemp.txt)
GOTO CrearRutas

:NADA
echo msgbox "No has escrito nada %USERNAME%", 64, "Mensaje de Error"> %temp%\nada.vbs
start %temp%\nada.vbs
%weno% >nul
del %temp%\nada.vbs >nul
cls
call:principal

:ERRONEO
echo msgbox "%USERNAME% La opcion que has escrito no es valida", 64, "Informacion" > %temp%\erroneo.vbs
start %temp%\erroneo.vbs
%weno% >nul
del %temp%\erroneo.vbs
CLS
CALL:principal

:NOEXISTE
echo.
echo Un error ha ocurrido %USERNAME%:
echo La Carpeta de entrada ya no existe... o ha sido renombrada.....
echo.
SET opcnoe=x
SET /P opcnoe="Deseas Borrar El Archivo de Rutas? [S/N]: "
IF "%opcnoe%"=="" GOTO NADADOS
IF "%opcnoe%"=="S" GOTO SE
IF "%opcnoe%"=="s" GOTO SE
IF "%opcnoe%"=="N" GOTO NO
IF "%opcnoe%"=="n" GOTO NO

:NADADOS
echo msgbox "No has escrito nada %USERNAME%", 64, "Mensaje de Error"> %temp%\nada.vbs
start %temp%\nada.vbs
%weno% >nul
del %temp%\nada.vbs >nul
cls
GOTO NOEXISTE

:SE
ECHO %USERNAME% El Archivo antiguo sera borrado y pasaras a crear uno nuevo
echo con las nuevas rutas de respaldo....
echo.
echo Presiona una tecla para continuar....
pause >nul
CALL:CambiarRutas

:NO
CLs
GOTO principal

:VEAME
IF EXIST %temp%\rutascarptemp.bat (DEL %temp%\rutascarptemp.bat)
IF EXIST %temp%\Archivo_de_Rutas.txt (DEL %temp%\Archivo_de_Rutas.txt)
REN %temp%\rutascarptemp.txt *.bat
CALL %temp%\rutascarptemp.bat
REN %temp%\rutascarptemp.bat *.txt
echo Espere mientras se genera el archivo
%weno% > nul
%weno% > nul
echo Estas son las rutas de Respaldo que has configurado... > %temp%\Archivo_de_Rutas.txt
echo -------------------------------------------------------- >> %temp%\Archivo_de_Rutas.txt
echo. >>%temp%\Archivo_de_Rutas.txt
echo Carpeta a Respaldar = %rutaentrada% >> %temp%\Archivo_de_Rutas.txt
echo. >> %temp%\Archivo_de_Rutas.txt
echo ________________________________________________________ >> %temp%\Archivo_de_Rutas.txt
echo. >> %temp%\Archivo_de_Rutas.txt
echo Carpeta donde se guardara el respaldo = %rutasalida% >> %temp%\Archivo_de_Rutas.txt
echo. >> %temp%\Archivo_de_Rutas.txt
echo ________________________________________________________ >> %temp%\Archivo_de_Rutas.txt
echo. >> %temp%\Archivo_de_Rutas.txt
echo Nombre con que sera nombrada la carpeta de Respaldo = %nomcarpsalida% >> %temp%\Archivo_de_Rutas.txt
echo. >> %temp%\Archivo_de_Rutas.txt
echo ________________________________________________________ >> %temp%\Archivo_de_Rutas.txt
echo. >> %temp%\Archivo_de_Rutas.txt
echo Respaldar Carpetas by Francisko.O! >> %temp%\Archivo_de_Rutas.txt

start %temp%\Archivo_de_Rutas.txt
echo Archivo Generado con Exito... Presiona un tecla para volver al menu principal...
pause > nul
DEL %temp%\Archivo_de_Rutas.txt >nul
GOTO Principal


:LOADER
echo.
echo                 ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo                 º                                            º
echo                 º                                            º
echo                 º                                            º
echo                 º                  CARGANDO                  º
echo                 º                                            º
echo                 º                                            º
echo                 º                                            º
echo                 ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
echo.
GOTO:eof

:ESPERA
ping -n 2 0.0.0.0 >nul
GOTO:eof

:PREGU
CLS
COLOR A
TITLe Automatizar
echo.
echo Con esta opcion el programa comenzara a respaldar tu carpeta
echo autmaticamente cada vez que lo ejecutes.
echo.
echo Ten en cuenta que si eliges si, no podras cambiar las rutas de copiado.
echo En caso de que quieras hacerlo, Debes hacer lo siguiente:
echo Debes ir a "INICIO" -^> "Ejecutar"
echo y escribir "%%temp%%" (sin las comillas) y borrar el archivo respuesta.txt.
echo.
echo Si eliges NO el programa mostrara un menu principal cada vez que lo ejecutes.
echo.
SET /P var="[S/N]: "
IF "%var%"=="S" (GOTO SERES)
IF "%var%"=="s" (GOTO SERES)
IF "%var%"=="N" (GOTO NORES)
IF "%var%"=="n" (GOTO NORES)
:SERES
echo @SET masvar="1">%temp%\respuesta.txt
GOTO:SEGUIR
:NORES
echo @SET masvar="2">%temp%\respuesta.txt
GOTO:MENUPRIN


Saludos :D!
#36
Hola! yo de nuevo  :-X!!
Espero estén todos bien ^^, tengo un programa con el que puedo ingresar datos y me crea un archivo .SQL el que después lo mueve a una carpeta en C: llamada SQLUPDATES, todo bien hasta ahí, pero quiero hacer que el programa me renombre el archivo al NOMBRE que le doy yo en el programa + LA FECHA DEL DIA DE CREACION, osea NOMBRE+FECHA.sql, pero no lo puedo hacer, miren asi esta hecho el programa:
Código (DOS) [Seleccionar]

@echo off
title Creador de Sql de skills para Npc's

:inicio
color 80
cls
echo Escribe mover para mover tus arhivos.
echo Escribe menu para ir al menu principal.
echo.
echo Datos Escritos Anteriormente:

echo [%npcid%] - [%skillid%] - [%skilllvl%]
echo.
set /p npcid="ID del NPC: "
if %npcid%==mover call:moverarch
if %npcid%==menu call %temp%\RarSFX0\sexyexec\mpdos.bat
set /p skillid="ID de la skill: "
set /p skilllvl="Nivel de la skill: "
echo.
set /p nombre="Nombre del archivo script: "
echo.
:getscript

echo INSERT INTO custom_npcskills values >>%nombre%.sql
echo (%npcid%, %skillid%, %skilllvl%); >>%nombre%.sql
echo.
echo %nombre%.sql ha sido creado con exito....
echo.
echo Presiona una tecla para volver a empezar
pause>nul
goto inicio

:moverarch

set fechaYhora=%~t1
set fecha=%fechaYhora:~0,10%
set fecha=%fecha:/=-%
ren %nombre%.sql %nombre%+%fecha%%~x1.sql

cd C:\
if not exist SQLupdates (MKDIR SQLupdates)
cd %temp%\RarSFX0
move /-Y *.sql C:\SQLupdates
cd C:\
start SQLupdates
cd %temp%\RarSFX0
goto inicio

Le agrege la función renombrar un archivo a su fecha de creación del post librería de funciones, pero aun asi nose porke no me funciona, si alguien me puede ayudar se lo agradecería mucho ^^

De ante mano muchas gracias ;D!


y saludos a todos ;D!
#37
Scripting / Usuario y Contraseña en BATCH ;D!
9 Septiembre 2008, 04:04 AM
Hola!, este es mi primer post en este foro, y espero que no sea el ultimo ^^

Me gusta mucho la programación en bath y tomando algunos ejemplos y después de mucho tiempo por fin logre codear un sistema de login y usuario ;D!, o sea un sistema donde se crea un usuario y una contraseña y cada vez que se necesite entrar al sistema pide los datos ingresados con anterioridad, el BATH trabaja con la carpeta %TEMP% de Windows para que no se vean los archivos donde se guarda el usuario y su password ^^.
Bueno, el primer bath es el de LOGIN, donde creamos un usuario, lo guarda en un archivo llamado login.txt y lo guarda en %temp%\lyc\login.txt con atributo de OCULTO.
Donde dice TURUTA es donde debes colocar la ruta para llamar a tu programa xD!
Código (DOS) [Seleccionar]

@echo off
title Login Creator
if not exist %temp%\lyc (MKDIR %temp%\lyc)
cls
echo.
echo No has creado un Usuario.....
echo.
set /p usuario="Escribe tu nuevo usuario: "
echo if %%login%%==%usuario% (goto bien) else goto noesS>>login.txt
echo :bien>>login.txt
echo echo.>>login.txt
echo echo USUARIO CORRECTO>>login.txt
echo echo.>>login.txt
echo pause>>login.txt
echo ren %%temp%%\lyc\login.bat login.txt>>login.txt
echo call TUPROGRAMA.bat>>login.txt
echo goto menu>>login.txt
echo :noesS>>login.txt
echo color 47>>login.txt
echo echo Lo siento pero el usuario no corresponde...>>login.txt
echo echo.>>login.txt
echo echo Presiona un tecla para ingresar el usuario de nuevo...>>login.txt
echo pause^>nul>>login.txt
echo call TURUTA\comparador.bat>>login.txt
move TURUTA\login.txt %temp%\lyc\
attrib +H %temp%\lyc\login.txt
attrib +H %temp%\lyc
echo.
echo Listo!! Usuario Guardado...
echo.
echo Presiona una letra para ir al menu principal...
pause>nul
call TUPROGRAMA.bat
echo Presiona una letra para ir al menu principal...
pause>nul
call TUPROGRAMA.bat

Aquí esta el BATH que guarda la contraseña:

Código (DOS) [Seleccionar]

@echo off
title Password Creator.
if not exist %temp%\lyc (MKDIR %temp%\lyc)
cls
:clave
echo.
echo No has creado una contraseña.....
echo.
set /p password="Escribe tu nueva contraseña: "
echo if %%clave%%==%password% (goto bien) else goto noes>>clave.txt
echo :bien>>clave.txt
echo echo.>>clave.txt
echo echo CONTRASEÑA CORRECTA.>>clave.txt
echo echo.>>clave.txt
echo echo Presiona una tecla para ir al menu principal...>>clave.txt
echo pause^>nul>>clave.txt
echo ren %%temp%%\lyc\clave.bat clave.txt>>clave.txt
echo call TURUTA\TUPROGRAMA.bat>>clave.txt
echo goto menu>>clave.txt
echo :noes>>clave.txt
echo color 47>>clave.txt
echo echo Lo siento pero la clave no corresponde...>>clave.txt
echo echo.>>clave.txt
echo echo Presiona un tecla para ingresar la clave de nuevo...>>clave.txt
echo pause^>nul>>clave.txt
echo call TURUTA\comparador.bat>>clave.txt
move TURUTA\clave.txt %temp%\lyc\
attrib +H %temp%\lyc\clave.txt
attrib +H %temp%\lyc
echo.
echo Listo!! Tu contraseña esta lista y guardada..
echo.
echo Presiona una letra para ir al menu principal...
pause>nul
call TUPROGRAMA.bat


Este code hace lo mismo que el de usuario pero lo guarda en un archivo clave.txt.
Ahora estos bat no funcionan por si solos, necesitan otro bat externo que se llama COMPARADOR.bat,
Código (DOS) [Seleccionar]

@echo off
title Login....
:again
cls
attrib -H %temp%\lyc
attrib -H %temp%\lyc\login.txt
attrib -H %temp%\lyc\clave.txt
ren %temp%\lyc\*.txt *.bat
cls
color 07
echo.
echo Hola Bienvenido....
echo.
set /p login="Cuales es tu Usuario?: "
call %temp%\lyc\login.bat
ren %temp%\lyc\login.bat login.txt
attrib +H %temp%\lyc\login.txt
attrib +H %temp%\lyc
cls
echo.
echo Escribe tu contraseña...
echo.
set /p clave="Tu Clave es?: "
call %temp%\lyc\clave.bat
ren %temp%\lyc\clave.bat clave.txt
attrib +H %temp%\lyc\clave.txt
attrib +H %temp%\lyc

Este bath lo que hace es quitar los atributos de OCULTO a la carpeta lyc y a los archivos login.txt y clave.txt y los renombra a *.bat.
Ahora para que tu programa llame a estos BATH cada vez que entre el usuario a tu programa debes agregar las siguiente líneas al principio del menú principal de tu sistema, de la siguiente manera ^^

if exist %temp%\lyc\login.bat (ren %temp%\lyc\login.bat login.txt)
if exist %temp%\lyc\clave.bat (ren %temp%\lyc\clave.bat clave.txt)
if not exist %temp%\lyc\login.txt call TURUTA\logincreator.bat
if not exist %temp%\lyc\clave.txt call TURUTA\passwordcreator.bat
call TURUTA\comparador.bat

Y así cuando se ejecute tu programa va a renombrar login.bat a .txt y clave.bat a .txt, y si no existe %temp%\lyc\login.txt y clave.txt llama a los bat que crean el usuario y la contraseña xD!, y si existen llama al bath (comparador.bat) que se encarga de comparar  el usuario que estas ingresando con el que esta guardado en los archivos ya creados, me explico verdad xDDDD?, y si es igual, te deja pasar y pasas a la contraseña, si no son iguales te da una pantalla de error donde te dice que esta incorrecto y vuelve a principio =).
Lo e probado varias veces y funciona correctamente.... Ahora si borras la siguiente línea
"ren %%temp%%\lyc\clave.bat clave.txt" de los bath para crear el usuario y la pass, el programa no compara nada de nada y pongas lo que pongas te dejara pasar, aun no se porque pero es para que lo sepan xDDDD!, si alguien lo prueba y sabe como arreglar esto seria genial ;D!!!!

Espero les sirva =)
El que lo quiera mejorar seria genial, pero lo único que pido es que pongan las mejoras en el post para así también saber como ir mejorándolo :D!!!!!!

Saludos y es pero que les sirva ;D!
PD: disculpas por las faltas de ortografía ^^.