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ú

Mensajes - Eleкtro

#7001
Scripting / [APORTE] [BATCH] Files2List
11 Abril 2014, 23:34 PM
Hola

He escrito este Script el cual genera un archivo de texto que contiene la lista de archivos con la estructura de archivos del directorio de trabajo y de sus subdirectorios, el directorio de trabajo se puede modificar en las variables del Script, y la lista de archivos en el archivo de listado se registra usando rutas relativa de los archivos de dicho directorio de trabajo.

¿Porque en Batch si siempre me estoy quejando de este "lenguaje"?, para recordar viejos tiempos y porque tuve que escribirlo y testearlo diréctamente desde una VM, con otro lenguaje habria sido aún más coñazo estar testeando de la VM al PC host y viceversa.

Bueno, el script tiene 3 métodos de exclusión de archivos, que son: 1. Por extensión, 2. Por nombres, o 3. Por ruta absoluta, esta última está limitada a la capacidad de caracteres que puede tener un String en Batch (Int32).
El Script tiene 2 métodos de listar los archivos, que son: 1. Listado normal, y 2. Listado incluyendo archivos ocultos.
El Script también tiene capacidad de registrar unformación básica en un Log, y la funcionalidad de medir el tiempo transcurrido de la operación.

Todo lo que he mencionado se puede configurar en las variables que están documentadas con comentarios de ayuda en el código.

Nota: Al explotar la limitada capacidad de Batch añadiendo varias funcionalidades adicionales a un código, este se vuelve demasiado lento, ya que Batch por naturaleza es MUY lento para trabajar, así que ya aviso, si no necesitan excluir archivos entonces no asignen ningún valor en las variables de exclusión.

PD: En el log se guardan las rutas relativas de los archivos que hayan sido excluidas:

Files2List.log
CitarExcluded Files:
===============

.\Filesize Truncator.bat
.\Folders2List.bat
.\Windows\WinSxS\Get Manifests.bat


· Una imagen de muestra:



· El código:

Files2List.cmd
Código (dos) [Seleccionar]
@Echo OFF



REM =================
REM Console Settings:
REM =================

Title Files2List - By Elektro
Mode Con Cols=150 Lines=50
CHCP 1252 1>NUL & REM Windows-1252, Spanish-Latin.



REM =====
REM Info:
REM =====

Echo+
Echo  ----------------------------------------------------------------------------------------------------------------------------------
Echo  This script writes a textfile containing the relative paths of the file structure at the working directory and it's subdirectories
Echo  ----------------------------------------------------------------------------------------------------------------------------------
Echo+



REM ====================
REM User defined values:
REM ====================

REM This value indicates the directory where to list it's file structure.
Set "WorkingDir=%CD%"

REM This value indicates the resulting file list.
Set "OutputFile=%CD%\Files.txt"

REM This value indicates the ubication of the logfile that will record info.
Set "Logfile=%CD%\%~n0.log"

REM This value indicates the File-Extensions to exclude during the process.
REM ( Use an ';' delimiter to separate multiple extensions )
Set "ExcludeExts=.bat;.cmd"

REM This value indicates the filenames to exclude during the process.
REM ( Use an ';' delimiter to separate multiple filenames )
Set "ExcludeNames=%~nx0"

REM This value indicates the files to exclude during the process.
REM ( Use an ';' delimiter to separate multiple files )
Set "ExcludeFiles=%OutputFile%;%Logfile%"

REM This value indicates how the hidden files are threated when listing the file structure.
REM  True = List files and also files with the 'hidden' attribute.
REM False = List only normal files without the 'hidden' attribute.
Set "IncludeHiddenFiles=True"



REM =====
REM Main:
REM =====

:: Call Methods.
Call :CheckErrors
Call :CreateLog
Call :StartTimer
Call :ListFiles "%IncludeHiddenFiles%"
Call :StopTimer
Call :EndLog
Pause&Exit



REM ========
REM Methods:
REM ========

:CreateLog
:: Create the Script Logfile and record starting info on it.
FSutil.exe File CreateNew "%LogFile%" "0" 1>NUL
(
Echo+
Echo       Files 2 List
Echo =========================
Echo   %DATE% ^| %TIME:~0,-3%
Echo /\/\/\/\/\/\/\/\/\/\/\/\/
Echo+
Echo [i] Working Directory...: %WorkingDir%
Echo [i] Include Hidden Files: %IncludeHiddenFiles%
Echo+
Echo [i] Excluded Extensions.: %ExcludeExts%
Echo [i] Excluded Filenames..: %ExcludeNames%
Echo [i] Excluded Files......: %ExcludeFiles%
Echo+
Echo [i] Output file.........: %OutputFile%
Echo [i] Log file............: %LogFile%
Echo+
Echo =========================
)>"%LogFile%"

:: Display starting log info.
Type "%LogFile%" | MORE

:: Continue writting log.
(
Echo+
Echo Excluded Files:
Echo ===============
Echo+
)>>"%LogFile%"

Goto:EOF


:EndLog
(
Echo+
Echo [i] Done!           | MORE
Echo [i] Listed Files..: %ListedFileCount% files.
Echo [i] Excluded Files: %ExcludedFileCount% files.
Echo [i] Elapsed Time..: %ElapsedTime%
Echo+
)>>"%LogFile%"

:: Display ending information.
CLS
Type "%LogFile%"
Goto:EOF


:StartTimer
Set "StartingDate=%Date%"
Set "StarttingTime=%Time:~0,-3%"
Goto :EOF


:StopTimer
(
Echo Minutes = DateDiff^("n", "%StartingDate% %StarttingTime%", Now^)
Echo WScript.Echo Minutes ^& " Minutes"
)>"%TEMP%\%~n0 MinuteDiff.vbs"

For /F "Tokens=*" %%# In (
'Cscript.exe /Nologo "%TEMP%\%~n0 MinuteDiff.vbs"'
) Do (
Set "ElapsedTime=%%#"
)

Goto:EOF


:ListFiles
Echo [+] Collecting files, this operation could take some minutes long, please wait...
If /I "%~1" EQU "True"  (Call :ListHiddenFiles)
If /I "%~1" EQU "False" (Call :ListNormalFiles)
Goto:EOF


:ListNormalFiles
(FOR /R "%WorkingDir%" %%# in ("*") DO (

Set "Exclude="

If Defined ExcludeExts (
(
Echo "%ExcludeExts%" | Find.exe /I "%%~x#" 1>NUL 2>&1
) && (
Call Set "Exclude=True"
)
)

If Defined ExcludeNames (
(
Echo "%ExcludeNames%" | Find.exe /I "%%~nx#" 1>NUL 2>&1
) && (
Call Set "Exclude=True"
)
)

If Defined ExcludeFiles (
(
Echo "%ExcludeFiles%" | Find.exe /I "%%~f#" 1>NUL 2>&1
) && (
Call Set "Exclude=True"
)
)

If Not Defined Exclude (
Set "File=%%~f#"
Call Echo %%File:%WorkingDir%=.%%
Set /A "ListedFileCount+=1"
) Else (
Set "File=%%~f#"
Call Echo %%File:%WorkingDir%=.%%>>"%LogFile%"
Set /A "ExcludedFileCount+=1"
)

))>"%OutputFile%"
Goto :EOF


:ListHiddenFiles
(FOR /F "Tokens=* Delims=" %%# in ('Dir /B /S /A-D "%WorkingDir%\*"') DO (

Set "Exclude="

If Defined ExcludeExts (
(
Echo "%ExcludeExts%" | Find.exe /I "%%~x#" 1>NUL 2>&1
) && (
Call Set "Exclude=True"
)
)

If Defined ExcludeNames (
(
Echo "%ExcludeNames%" | Find.exe /I "%%~nx#" 1>NUL 2>&1
) && (
Call Set "Exclude=True"
)
)

If Defined ExcludeFiles (
(
Echo "%ExcludeFiles%" | Find.exe /I "%%~f#" 1>NUL 2>&1
) && (
Call Set "Exclude=True"
)
)

If Not Defined Exclude (
Set "File=%%~f#"
Call Echo %%File:%WorkingDir%=.%%
Set /A "ListedFileCount+=1"
) Else (
Set "File=%%~f#"
Call Echo %%File:%WorkingDir%=.%%>>"%LogFile%"
Set /A "ExcludedFileCount+=1"
)

))>"%OutputFile%"
Goto:EOF



REM ===============
REM Error Controls:
REM ===============

:CheckErrors
:: 'IncludeHiddenFiles' Value check.
If /I "%IncludeHiddenFiles%" NEQ "True" If /I "%IncludeHiddenFiles%" NEQ "False" (
Echo [x] Error parsing parameter 'IncludeHiddenFiles',
Echo     value '%IncludeHiddenFiles%' is not a Boolean value.
Pause&Exit
)

Goto:EOF


Espero que a alguien le sirva de utilidad.

Saludos!
#7002
> http://www.scriptcode.com/download/

PD: Es Software de pago.
#7003
Quick Batch File Compiler no es un lenguaje de programación, es un programa.

EDITO: Elimino el anterior mensaje que escribí porque me he dado cuenta de que pu es la abreviación válida del comando put, sorry.


EDITO 2: Cosas a tener en cuenta:

1. El parámetro especial %0

Si tu tienes tu ScriptConvertido.exe en el escritorio, y en ese mismo directorio tienes un Script que le quieres enviar como parámetro al comando FTP (Ej: ftp -i -s:"%~dp0Script.txt"), jamás te va a funcionar el Script, ya que estos empaquetadores de Scripts necesitan extraer el contenido (el Script) a una carpeta temporal, y al hacer esto, el directorio de trabajo actual del Script (%0) es la carpeta temporal, no es la carpeta desde donde ejecutas el exe (en este caso el escritorio), lo puedes comprobar de manera muy sencilla haciendo un Echo %0.


2. Bugs de Software

Ese tipo de programas que convierten Scripts Batch a Executables todos tienen sus fallos, no son perfectos ya que Batch no es un lenguaje compilado, algunos programas simplemente copian el Script original sin hacerle modificaciones, pero otros si que se las hacen para compatibilizar y pueden mal-interpretar una instrucción o algún caracter de alguna linea del código que quieres convertir, te sugiero que evites usar los operadores de agrupación () cuando uses ese tipo de programas, intenta escribirlo todo en pocas lineas, y si puedes concatenar todas las órdenes en una sola linea mucho mejor para intentar evitar esos problemas.

Te sugiero que utilices la aplicación ExeScript Editor para empaquetar un Script, nunca me dió ese tipo de problemas.


Saludos
#7004
Cita de: knario en 11 Abril 2014, 12:10 PMMUY INTERESANTE... si señor... gracias por compartir  ;)

Gracias a ti por comentar.

Saludos!
#7005
Cita de: josecmore en 11 Abril 2014, 17:12 PM
Hola de nuevo. Es evidente que para el ejemplo que he puesto he creado un archivo con extensión (txt) con el bloc de notas.
Gracias de nuevo.
Saludos.

¿Entonces el nombre del archivo excel siempre va a ser estático?, pensé que el archivo que quieres modificar siempre tendría la fecha del dia anterior y eso lo complicaba un poco más y más si habian más archivos en el mismo directorio (nada que no se puede solucionar con el patrón de busqueda adecuado), pero entonces simplemente esto te servirá:

Código (dos) [Seleccionar]
@Echo OFF & Title Renombrar archivo Excel con fecha actual y nombre del dia

Set "File=%CD%\Cuenta.xls"
Call :DateRename "%File%"

Pause&Exit /B 0

:DateRename
Set "Today=%Date:~0,2%-%Date:~3,2%-%Date:~6,4%"

(
Call Echo WScript.Echo WeekDayName^(Weekday^("%%Today%%"^)^)
)>"%TEMP%\GetDayName.vbs"

For /F "Tokens=*" %%# In (
'CScript.exe /NoLogo "%TEMP%\GetDayName.vbs"'
) Do (
Set "DayName=%%#"
Del /Q "%TEMP%\GetDayName.vbs" 1>NUL
)

REM "Nombre.ext" > "DD-MM-YYYY NombreDelDía.ext"
(Rename "%~1" "%Today% %DayName%%~x1") & (Goto :EOF)


Saludos
#7006
Windows / Re: [ActiveX] me sale este mensaje
11 Abril 2014, 16:41 PM
Cita de: KZN en 11 Abril 2014, 12:27 PMque debería hacer?
no veo nada raro.

Prueba a restaurar la configuración por defecto de IExplorer, porque el error te ocurre cuando tienes el IExplorer en ejecución, ¿me equivoco?.

Según la versión de Windows y de IE que tengas instalada puedes encontrar el modo de restaurar los valores por defecto aquí:
· http://lmgtfy.com/?q=internet+explorer+restore+default+settings

Saludos!
#7007
No puedes ejecutar un medio sin inicializar el hardware que contiene ese medio... y eso es precisamente lo que hace la BIOS (aparte de otras muchas tareas, claro).

No soy un experto en Hardware pero la BIOS se encarga de inicializar el microprocesador y luego el resto del hardware, además de comprobar su operatividad realizando tests, y luego intenta buscar una partición que contenga un sistema operativo, vamos, que antes de pasar por la BIOS el PC no sabe ni si existe un SO ni mucho menos si existe un DVD-ROM conectado al PC, como para que puedas iniciar un CD...

Saludos!
#7008
4.0
· Personalizando la estética de la instalación de Windows



Ahora que ya sabemos automatizar la instalación de Windows... hagámosla bonita, ¿no?, cambiemosle todas las "florituras" y colores  >:D.

En esta parte del tutorial aprenderemos a personalizar las imágenes que usa el instalador de Windows, y de esta manera lo pondré punto y final a la personalización de la instalación, ya llegaremos a lo verdaderamente interesante en los siguientes volumenes del tutorial ;).

Nota: Se aconseja un cierto nivel de conocimientos sobre la edición de imágenes BMP (Bitmap) y sus transparencias, y opcionalmente conocimientos de archivos ICO (Iconos).

Nota: Vuelvo a recordar que este tutorial está basado y orientado en una imagen ISO de Windows 8.1 x64.


· ¿Que herramientas necesitaremos?
 Un editor de recursos, recomiendo la aplicación Restorator 2009, puero pueden usar Resource Hacker, Anolis Resourcer, o su herramienta favorita.
 Un editor de imágenes, recomiendo la aplicación Photoshop, pero pueden usar Microsoft Paint , cualquier otro e incluso pueden descargar imágenes (válidas) de Internet.
 Opcional: Un grabador de imágenes ISO para testear nuestra instalación personalizada, recomiendo la herramienta OSCDIMG que se encuentra ubicada en %WinKit%\oscdimg\oscdimg.exe
 Opcional: Una máquina virtual para testear la ISO, recomiendo la aplicación VirtualBox.






4.1
· Ubicación de los recursos de imágenes de la instalación

Dentro del DVD de Windows hay 3 librerías que contienen imágenes Bitmap e Iconos:
· ...\Sources\spwizimg.dll
· ...\Sources\w32uiimg.dll
· ...\Sources\arunimg.dll

Y el archivo Bitmap ubicado en ...\Sources\Background.bmp

Aparte, los mismos archivos se encuentran dentro de la imagen Boot.wim en las mismas ubicaciones, y esos archivos dentro de la imagen son las que debemos modificar.

Dentro de la imagen Boot.wim además hay otro archivo Bitmap ubicado en ...\Windows\System32\Setup.bmp

Nota: Si queremos hacer una modificación muy básica entonces solo debemos tener en cuenta la librería spwizimg.dll


Este es el contenido de las 3 librerías:

Nota: Los números son el nombre del recurso.


· spwizimg.dll

Bitmaps:



· w32uiimg.dll

Bitmaps:


Iconos:



· arunimg.dll

Bitmaps:


Iconos:








4.2
· Identificando los recursos de imagen que utiliza el instalador


Estos son los nombres de algunos recursos Bitmap que se usan en la instalación de Windows, en el punto 3.1 del tutorial pueden enlazar el nombre del recurso para saber en que librería se encuentra.























4.3
· Modificando los recursos de imágenes

Pueden modificar los recursos de las librerías que se encuentran en el DVD de Windows, pero les recuerdo que los recursos que nos interesan modificar son los de las librerías que se encuentran dentro de la imagen Boot.wim (la cual ya expliqué como se puede montar en el punto 3.2 del tutorial), se encuentran en el índice de imagen 2.

En este punto la verdad es que no puedo ayudar mucho ni creo poder dar explicaciones útiles, es cosa tuya saber como editar una imagen y reemplazarla con un editor de recursos, si no sabes... ¿para que leiste hasta aquí?. ¡ ánimo !






4.3
· Automatizar la tarea de personalización de recursos de imágenes

...¿Te creiste que no iba a ayudar? >:D
Al empezar este tutorial dije que iba a proporcionar todas mis herramientas y creaciones en todos los temas, así que si te parece algo complicado la edición de recursos entonces estás de suerte!

Voy a explicar una manera muy sencilla de automatizar todo este tutorial utilizando un Script Batch y un archivo de texto, pero antes que nada quiero comentarles que en este enlace pueden descargar todo lo necesario que voy a comentar, y un ejemplo completo con imagenes y PSD's, para los que no les guste leer instrucciones largas :P

http://www.mediafire.com/download/bf17fpnjpqi30fd/WIM_Resource_Replacer.zip

Actualizado:
http://www.mediafire.com/download/ktzms7i09qt4n2b/wim+resource+replacer+0.2.rar


Estas son las instrucciones:

Por un lado deben descargar el editor de recursos Anolis Resourcer, ¿porque?, porque es con el que yo manejo de manera commandline :P
Lo pueden descargar aquí: http://anolis.codeplex.com/releases/view/32286

Por otro lado deben conocer las ubicaciones de las librerías que quieren modificar y/o archivos que quieren reemplazar, en el caso de las librerías deben conocer también los nombres de los recursos que quieren modificar (los tienen en el punto 4.1 del tutorial), y obviamente también deben tener las imagenes modificadas.

Conociendo y teniendo los archivos necesarios que acabo de mencionar, deben crear un archivo de texto delimitado por puntos y comas, estos archivos los parseará/procesará el script que luego les mostraré.

La sintaxis que deben usar para delimitar los recursos en el archivo de texto, para reemplazar archivos es:
Ruta relativa del archivo que va a ser reemplazado;Ruta relativao absoluta del archivo que se copiará

La sintaxis que deben usar para delimitar los recursos en el archivo de texto, para librerías de recursos de imágenes es:
Ruta relativa del recurso a modificar;Nombre del recurso;Ruta del recurso modificado

Nota: ¡ No se debe escribir la ruta absoluta del directorio montado !


Lean esta ayuda que escribí para entender la sintaxis del archivo de texto delimitado:

CitarResourceList Help - By Elektro
##############################


========================
To add or replace files:
========================

Syntax: OutFile;InFile

· Outfile:
 Indicates the file that will be Created/Replaced.
 Should be written as a relative mount filepath.

· InFile:
 Indicates the file that will be copied to the OutFile.
 Should be written as an absolute filepath.


Examples:
---------
Sources\Background.bmp;.\Resources\Background.bmp
Sources\Background.bmp;C:\Resources\Background.bmp


=====================
To replace resources:
=====================

Syntax: ResourceFile;ResourceName;InResource

· ResourceFile:
 Indicates the dll file that will be opened to replace resources inside.
 Should be written as a relative mount filepath.

· ResourceName:
 Indicates the resource name that will be replaced inside the resource file.

· InResource:
 Indicates the resource to copy inside the resource file.
 Should be written as an absolute filepath.


Examples:
---------
Sources\spwizimg.dll;517;.\Resources\517.bmp
Sources\spwizimg.dll;517;C:\Resources\517.bmp


Esto es un ejemplo de un archivo delimitado escrito de forma correcta:

Resources.txt
Sources\Background.bmp;.\Resources\Background.bmp
Windows\System32\Setup.bmp;.\Resources\Setup.bmp

Sources\spwizimg.dll;405;.\Resources\405.bmp
Sources\spwizimg.dll;407;.\Resources\407.bmp
Sources\spwizimg.dll;408;.\Resources\408.bmp
Sources\spwizimg.dll;516;.\Resources\516.bmp
Sources\spwizimg.dll;517;.\Resources\517.bmp

Sources\w32uiimg.dll;207;.\Resources\207.bmp



A continuación, lo único que tienen que hacer es ejecutar este Script, el Script se encargará de montar la imagen, reemplazar archivos (si especificaron alguno) y/o reemplazar recursos de imagenes si especificaron alguno, después desmontará la imagen y listo.

Antes de poder automatizar esta tarea usando mi Script primero deben configurar las rutas de los valores WindowsImage, MountDir, Anolis, Dism, y ResourceList que se encuentran documentados en la cabecera del archivo.


WIM Resource Replacer.bat
Código (dos) [Seleccionar]
@Echo Off & Title WIM Resource Replacer - By Elektro
Mode Con Cols=150 Lines=50



REM ======
REM About:
REM ======

:: Header Info.
Echo+
Echo -----------------------------------------------------------------------------------------
Echo This script mounts a Windows Image ^(WIM^) to replace image resources of a resource file.
Echo -----------------------------------------------------------------------------------------
Echo+



REM ====================
REM User defined values:
REM ====================

:: User defined values.
REM This value indicates whether the Windows Image should be mounted.
REM True  = 'DISM' will try to mount the 'WIM' image.
REM False = 'DISM' will not try to mount the WIM image.
REM Set this value to 'FALSE' if the 'WIM' image is already mounted in the specified mount directory,
REM Otherwise, keep it as 'TRUE'.
Set "MountImage=True"

REM This value indicates whether the Windows Image should be unmounted at the end.
REM True  = 'DISM' will try to unmount the 'WIM' image.
REM False = 'DISM' will not try to unmount the WIM image.
REM Set this value to 'FALSE' if you want to keep the image mounted to make other changes,
REM Otherwise, keep it as 'TRUE'.
Set "UnmountImage=True"

REM This value indicates the 'WIM' image to be mounted.
Set "WindowsImage=%UserProfile%\Desktop\win 8 .1\win\sources\Boot.wim"

REM This value indicates the Image Index of the 'WIM' image.
Set "ImageIndex=2"

REM This value indicates the directory where to mount the 'WIM' image.
Set "MountDir=%HomeDrive%\WinBootMount"

REM This value indicates the location of Anolis Resourcer 'Anolis.exe' file.
Set "Anolis=%CD%\Tools\Anolis.exe"

REM This value indicates the textfile that contains the Recource files to replace.
Set "ResourceList=%CD%\Resources.txt"

REM This value indicates the location of a custom 'DISM.exe' file if needed.
REM Default location:
REM "%SystemRoot%\System32\Dism.exe"
Set "Dism=%CD%\Tools\Dism\Dism.exe"

REM This value indicates the location of the logfile that will record 'DISM' exceptions.
Set "DismLogfile=%UserProfile%\Desktop\Dism.log"

REM This value indicates the logging-level of the 'DISM' process.
REM 1 = Errors only
REM 2 = Errors and warnings
REM 3 = Errors, warnings, and informational
REM 4 = All of the information listed previously, plus debug output
Set /A "DismLogLevel=2"



REM =====
REM Main:
REM =====

Call :CheckErrors
Call :CreateLog
Call :CreateMountDir
Call :Mount
CLS
Call :ParseResources
Call :Unmount

Echo+
Echo [i] Done!
Pause&Exit



REM ========
REM Methods:
REM ========

:CreateLog
:: Create the 'DISM' logfile with 'ANSI' encoding,
:: this is necessary to record a non-default 'DISM' loglevel such as '1' or '2'.
Echo+ >"%DismLogfile%"

:: Record initial info.
(
Echo+
Echo Automated DISM processing:
Echo ==========================
Echo+
Echo WIM Resource Replacer
Echo+
Echo [i] Date: %DATE% - %TIME:~0,2%:%TIME:~3,2%:%TIME:~6,2%
Echo+
Echo [i] Mount Image?...: %MountImage%
Echo [i] Unmount Image?.: %UnmountImage%
Echo+
Echo [i] Windows Image..: %WindowsImage%
Echo [i] Image Index....: %ImageIndex%
Echo [i] Mount Directory: %MountDir%
Echo+
Echo [i] Dism Path......: %Dism%
Echo [i] Dism Logfile...: %DismLogfile%
Echo [i] Dism Log Level.: %DismLogLevel%
Echo+
Echo [i] Anolis Path....: %Anolis%
Echo+
Echo ===========================
)>"%DismLogfile%"

:: Display initial info.
Type "%DismLogfile%"
Goto:EOF

:CreateMountDir
:: Create the mount directory.
(
If Not Exist "%MountDir%" If /I "%MountImage%" EQU "True" (
MkDir "%MountDir%" 2>NUL
)
) || (
Echo+
Echo [X] Error trying to create the directory "%MountDir%" to mount the Windows Image.
Echo [i] Ensure that you have Admin rights to create the directory.
Echo [i] Ensure that the directory name does not contains illegal characters.
Echo+
Pause&Exit
)
Goto:EOF

:Mount
:: Mounts the Windows Image into the mount directory.
If /I "%MountImage%" EQU "True" (

"%Dism%" /Mount-Image /ImageFile:"%WindowsImage%" /Index:"%ImageIndex%" /MountDir:"%MountDir%" /English /LogPath:"%DismLogfile%" /LogLevel:"%DismLogLevel%" || (
Echo+
Echo [X] Error mounting the Image Index "%ImageIndex%" in "%MountDir%"
Echo [i] Ensure that the Image Index exist.
Echo [i] Ensure that you have Admin rights to write inside the directory.
Echo [i] Ensure that the directory is not already mounted.
Echo [i] Ensure that the directory is fully empty.
Echo+
REM Try to unmount the failed image and discard changes.
If /I "%UnmountImage%" EQU "True" (
"%Dism%" /Unmount-WIM /Discard /MountDir:"%MountDir%"
)
Exit
)

)
Goto:EOF

:ParseResources
For /F "UseBackQ Tokens=1,2,* Delims=;" %%a In ("Resources.txt") Do (

If /I "%%~xa" EQU ".dll" (Call :ReplaceResource "%MountDir%\%%~a" "%%~b" "%%~c")
If /I "%%~xa" NEQ ".dll" (Call :CopyFile        "%MountDir%\%%~a" "%%~b")

)
Goto:EOF

:Unmount
:: Unmount the Windows Image commiting changes.
If /I "%UnmountImage%" EQU "True" (
"%Dism%" /Unmount-WIM /Commit /MountDir:"%MountDir%" /English /LogPath:"%DismLogfile%" /LogLevel:"%DismLogLevel%"
)
Goto:EOF

:TakeOwn
Takeown.exe /F "%~f1" 1>NUL
ICacls.exe "%~f1" /Grant "%UserName%":"F"  1>NUL
Goto:EOF

:CopyFile
Echo [+] Copying "%~2" to "%~1"
If Not Exist "%~2" (
Echo [X] Can't locate the input file "%~2". | MORE
Goto:EOF
)
Call :TakeOwn  "%~f1"
Copy /Y "%~f2" "%~f1" 1>NUL
Goto:EOF

:ReplaceResource
Echo [+] Replacing Resource Name "%~2" with "%~3" in resource file "%~f1"
If Not Exist "%~1" (
Echo [X] Can't locate the resource file to open "%~1". | MORE
Goto:EOF
)
If Not Exist "%~3" (
Echo [X] Can't locate the resource to copy "%~3". | MORE
Goto:EOF
)

Call :TakeOwn "%~1"

If /I "%~x3" EQU ".bmp" (
Start /W "Anolis" "%Anolis%" -op:upd -src:"%~f1" -type:Bitmap -name:"%~2" -lang:1033 -file:"%~f3")
)
If /I "%~x3" EQU ".ico" (
Start /W "Anolis" "%Anolis%" -op:upd -src:"%~f1" -type:Icon -name:"%~2" -lang:1033 -file:"%~f3")
)

Goto:EOF


REM ====================
REM File Error Controls:
REM ====================

:CheckErrors
:: WIM File Error-Check.
If /I "MountImage" EQU "True" If Not Exist "%WindowsImage%" (
Echo [X] Windows Image not found in: "%WindowsImage%" | MORE
Pause&Exit
)

:: ResourceList File Error-Check.
If Not Exist "%ResourceList%" (
Echo [X] Resource-List file not found in: "%ResourceList%" | MORE
Pause&Exit
)

:: DISM File Error-Check.
If Not Exist "%DISM%" (
Echo [X] DISM process not found in: "%DISM%" | MORE
Pause&Exit
)

:: Anolis Resourcer File Error-Check.
If Not Exist "%Anolis%" (
Echo [X] Anolis process not found in: "%Anolis%" | MORE
Pause&Exit
)

Goto:EOF






4.4
· Obteniendo resultados

Una vez hayan montado la imagen Boot.wim para modificar los recursos de imágenes que queramos, deben desmontar la imagen WIM y guardar los cambios (lease el punto 3.3 del tutorial si no sabes hacerlo).

Nota: Si usaste mi Script para reemplazar recursos entonces no tienes porque desmontar nada.

Ya solo nos quedará generar la ISO y testearla en un DVD, ¡¡ aquí os muestro el resultado visual del ejemplo que hice para este tutorial !! :
















¡ Les invito a postear sus modificaciones en este tema !
#7009

Información actualizada el 12/04/2014





3.0
Introducción a DISM

No quería tener que explicar el uso de DISM tan pronto, pero lo vamos a necesitar para casi todo, así que mejor aprendanlo ya (quien no sepa hacerlo).

DISM es una herramienta CLI (CommandLine Interface) que como su nombre indica se maneja por linea de comandos, por consola.

Con DISM podemos montar una imagen WIM a un directorio (es decir, extraer su contenido) para realizar cambios en la imagen, los cambios se pueden hacer con DISM o accediendo al directorio montado manualmente desde el Explorer, con DISM también podemos aplicar actualizaciones, drivers, ycaracteristicas de windows, o podemos eliminarlos.

También podemos capturar, cortar o agregar imagenes a una imagen WIM.

Nota: Usen siempre que puedan la versión específica de DISM para la imagen que vayamos a "tocar" el cual debería estar en la ubicación %WinKit%\Dism\Dism.exe si siguieron la parte del tutorial donde instalaron WAIK/WADK.

Nota: Para quien quiera saberlo, existen interfaaces gráficas de usuario (GUI) de la aplicación DISM, obviamente no es Software oficial de Microsoft ni aprobado por el mismo, y dichas GUIS  manejan la versión instalada de DISM, yo les recomiendo acostumbrarse a usar DISM por consola de forma tradicional, luego lo agradecerán con los Scripts automatizados que les mostraré.

Nota: Leerse la ayuda del comando quien quiera conocer otros parámetros útiles que no pienso comentar hasta otros volumenes del tutorial, escribir en consola:
Dism.exe /?






3.1
· Obtener información de una imagen WIM

Como expliqué en la primera parte del tutorial, una imagen WIM puede contener varios índices de imagenes, porfavor, leer el punto 1.2 de mi tutorial si no saben de que estoy hablando.

Si no conocemos el índice de la imagen que queremos montar, podemos usar el comando DISM para obtener información acerca de los índices.

La sintaxis del comando sería esta:

Dism.exe /Get-ImageInfo /ImageFile:"Imagen.wim"

El parámetro /Get-ImageInfo indica que se trata de una operación de obtención de información.
En el parámetro /ImageFile debemos indicar la ruta del archivo WIM la cual queremos obtener información.

Ejemplo:
Dism.exe /Get-ImageInfo /ImageFile:".\Boot.wim"








3.2
· Como montar una imagen WIM

En este ejemplo montaremos la imagen 2 del archivo Boot.wim del DVD de Windows que se encuentra ubicado en ...\Sources\Boot.wim.


La sintaxis del comando sería esta:

Dism.exe /Mount-Image /ImageFile:"Imagen.wim" /Index:"Índice de imagen" /MountDir:"Directorio de montaje"

El parámetro /Mount-Image indica que se trata de una operación de montaje.
En el parámetro /ImageFile debemos indicar la ruta del archivo WIM que queremos montar.
En el parámetro /Index debemos indicar el índice de la imagen que queremos montar.
En el parámetro /MountDir debemos indicar el directorio donde se va a montar la imagen WIM, el directorio debe existir y debe estar vacío, de lo contrario dará error.

Ejemplo:

MKDir "C:\WinPE Mount"
.\Dism.exe /Mount-Image /ImageFile:"%CD%\Boot.wim" /Index:"2" /MountDir:"C:\WinPE Mount"







A partir de aquí pueden dejar volar su imaginación para hacer modificaciones en el sistema de archivos, o usando DISM para aplicar cosas a la imagen, cosas que no explicaré hasta mucho más tarde.

Nota: No pueden volver a montar la imagen en el mismo ni en otro directorio mientras siga montada.






3.3
· Como desmontar una imagen WIM

Después de realizar cambios en una imagen WIM, esta tiene que desmontarse, podemos desmontarla y aplicar los cambios realizados, o podemos omitirlos (ningún cambio se aplicará).

Nota: Al desmontar una imagen, el directorio de montaje queda completamente vacío.


La sintaxis del comando para desmontar una imagen y aplicar cambios sería esta:

Dism.exe /Unmount-WIM /Commit /MountDir:"Directorio montado"

El parámetro /Unmount-Image indica que se debe realizar una operación de desmontaje.
El parámetro /Commit indica que se deben aplicar los cambios realizados en la imagen.
En el parámetro /MountDir debemos indicar el directorio donde se haya montado la imagen WIM.

Ejemplo:
Dism.exe /Unmount-WIM /Commit /MountDir:"C:\WinPE Mount"




La sintaxis del comando para desmontar una imagen sin aplicar cambios sería esta:

Dism.exe /Unmount-WIM /Discard /MountDir:"Directorio montado"

El parámetro /Unmount-Image indica que se debe realizar una operación de desmontaje.
El parámetro /Discard indica que no se deben aplicar los cambios realizados en la imagen.
En el parámetro /MountDir debemos indicar el directorio donde se haya montado la imagen WIM.

Ejemplo:
Dism.exe /Unmount-WIM /Discard /MountDir:"C:\WinPE Mount"









3.4
· Como reconstruir una imagen WIM

Opcionalmente y después de desmontar una imagen, podemos usar la utilidad ImageX que está instalada en el directorio %WinKit%\Dism\ImageX.exe para comprimir y reconstruir la imagen WIM, optimizando así el espacio.

Sintaxis:
ImageX /Export "Imagen de origen.wim" "índice" "Imagen de destino.wim" /Compress "Tipo de compresión" /Check

El parámetro /Export indica que se debe realizar una operación de exportación y debemos especificar por este orden la imagen WIM que queremos reconstruir, el índice de imagen (se puede usar un asterisco para marcar todos los índices), y la imagen resultante.
En el parámetro Compress debemos especificar el tipo de compresión entre los posibles tipos, que son: none, Fast, Maximum.
El parámetro /Check es opcional e indica que se debe comprobar la integridad de la imagen.

Ejemplo:
ImageX /Export ".\Install.wim" "*" ".\New Install.wim" /Compress "Maximum"

#7010
Windows / Re: [ActiveX] me sale este mensaje
11 Abril 2014, 00:08 AM
Muestranos los valores que tienes en esta clave:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\0

Si tienes un valor que es un caracter extraño, elimínalo, reinicia sesión del usuario y prueba de nuevo.

PD: Pero primero exporta la clave para tener un backup.

saludos