Entradas

Comandos comunes de MS-DOS

Activar el uso UTF-8 (Palabras con Acentos)

chcp 65001 

Ejecutar comando por cada archivo/directorio (Incluyendo nombres con espacios)

ECHO OFF
FOR /f delims^=^ eol^= %%f IN ('dir d:\downloads\ /b') DO (
ECHO "%%f"
)

Fecha y Hora (funciona para Español para México, en otros idiomas podría cambiar la posición de cada elemento, dada la configuración regional)

ECHO OFF
ECHO FECHA (YYYY/MM/DD):
ECHO %date:~-4,4%/%date:~-7,2%/%date:~-10,2% 
ECHO.
ECHO HORA (HH:MM:SS):
ECHO %time:~0,2%:%time:~3,2%:%time:~6%
ECHO.

Obtener la ruta del escritorio

::https://stackoverflow.com/a/34706178/3930332
for /f "usebackq tokens=1,2,*" %%B IN (`reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop`) do set DESKTOP=%%D
ECHO %DESKTOP%

Remover espacios en variables

SET "VAR=%VAR: =%"

Mostrar todas las líneas del archivo archivo.txt que no se encuentran en el archivo quitar.txt

findstr /i /L /V /g:"quitar.txt" "archivo.txt"

Referencias:

https://stackoverflow.com/questions/11270453/how-to-remove-spaces-from-file-names-in-bulk 

Fórmula para la mezcla de colores RGB

Estoy trabajando en un ampliador de imágenes de PixelArt y por enésima vez se me olvida la fórmula para combinar dos colores (RGB). 

Donde a y b son los compenentes RGB de cada color. Se tiene que evaluar por cada par de R, G y B.

Referencias

Convertir archivo PDF a PNG con ImageMagick y GhostScript

Convirtiendo PDF a PNG

En previos sistemas, siempre he tenido la necesidad de crear vistas en miniatura de archivos PDF, dado que casi todos los sistemas que he hecho, se requiere de exportar a PDF (y Excel). ImageMagick (https://imagemagick.org/script/download.php#windows) se ha convertido una de mis herramientas preferidas para la conversión y tratamiento de archivos de imagen; y precisamente tiene la opción de convertir (renderizar) archivos PDF a distintos formatos de imágen, gracias a GhostScript (https://www.ghostscript.com/download/gsdnld.html).

En mi caso personal, prefiero el formato PNG, dado que conserva la calidad máxima de archivo con un tamaño relativamente pequeño.

Código

convert -density 150 -background white -alpha remove %1 "%~n1-%%d.pdf.png"

Partes relevantes

  • -density (Resolución) - Establecer la resolución del archivo de salida. El tamaño (en pixeles) varía dependiendo de la resolución del archivo PDF.
  • %1 - Archivo a convertir
  • -background white -alpha remove - Por defecto, los archivos PDF tienen un fondo transparente, lo intercambiamos por uno blanco
  • %~n1 - Nombre de archivo sin extensión
  • %%d - Número de Página (1-n), %% se usa para archivos .bat
Página del manual del set 6114493 de Lego

Fuentes

Aplicar máscara a imagen en canal alfa

Desde que empecé a usar Imagemagick, a principios de año, he dejado de escribir bastante código en C# en pequeños programas de aplicación muy específica; a cambio de escribir comandos muy específicos para situaciones específicas, como en éste caso en donde quiero aplicar el canal alfa a una imagen, basándome en la escala de grises de otra imagen (Blanco/255 = Opaco, Negro/0 = Transparente).

convert cube.bmp cube_mask.bmp -alpha Off -compose CopyOpacity -composite cube.png


 

 https://imagemagick.org/

Renombar archivos de manera secuencial [MS-DOS]

Tengo un montón de archivos mp4 que quiero renombrar de manera secuencial. Son capturas de gameplays de videojuegos de mi xbox, por lo cual ni el nombre de archivo ni la fecha (que se indica en el nombre de archivo) me importa, pero quiero llevar un control de cada archivo; y es más fácil buscar un archivo '00001.mp4' en lugar de 'Minecraft 2020-06-10 23-18-05.mp4'.

El script se divide en dos partes principales: 

  • El contador - hace un bucle por cada archivo especificado por el comando dir y aumenta el valor de la variable _seq en uno (que se inicializa en cero; enableextensions y enabledelayedexpansion permiten que se pueda consultar el valor actual la variable _seq adentro del bucle, en lugar del final) y llama la subrutina :sub enviando el valor del contador junto con el nombre del archivo para renombrarlo.
  • Subrutina :sub- se encarga de darle formato al contador (convirtiendo '1' en '00001') y hace el renombramiento.

El script se puede cambiar el tipo de archivo a renombrar editando el patrón de busqueda del comando dir.

@ECHO OFF
@SETLOCAL enableextensions enabledelayedexpansion
::Activa el uso UTF-8 (Palabras con Acentos)
chcp 65001 

SET /a _seq = 0

for /f "tokens=*" %%f in ('dir /b *.mp4') do (
	SET /a "_seq+=1"
	CALL :sub !_seq! "%%f"
)

exit /b

:sub
	SET "_TMP=00000%1"
	SET "_TMP=%_TMP:~-5%"
	REN %2 %_TMP%.mp4 

Agregar un directorio o dominio virtual a una instalación de XAMPP (Windows)

Código

(Agregar al final)

Si se desea importar desde un archivo externo

Include conf/vhosts/*.conf

Directorio Virtual (Alias)

(XAMPP)/apache/conf/httpd.conf
<IfModule alias_module>
    Alias /git "D:/git/php"
</IfModule>

<Directory "D:/git/php">
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride all
    Order allow,deny
    Allow from all
    Require all granted
</Directory>

Dominio Virtual

Editar %WINDIR%\System32\Drivers\Etc\host con un editor de texto, agregando la línea al final
127.0.0.1			localhost.prod
(XAMPP)/apache/conf/httpd.conf
<VirtualHost localhost.prod>
    ServerAdmin webmaster@localhost.prod
    DocumentRoot "D:/dev/produccion"
</VirtualHost>

<Directory "D:/dev/produccion">
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride all
    Order allow,deny
    Allow from all
    Require all granted
</Directory>

Referencia

https://stackoverflow.com/a/21566403/3930332

Compilar aplicaciones nativas de Windows (C/C++) en Ubuntu (WSL, Windows Subsystem Linux) y MSYS2

Requisitos

APT

sudo apt install mingw-w64 binutils-mingw-w64 binutils-mingw-w64-x86-64 g++ g++-mingw-w64 -y

PACMAN

pacman -S mingw-w64-x86_64-gcc mingw-w64-cross-binutils

Código Fuente

Ejecutable

Si el código fuente se guarda con codificación ANSI, se pueden mostrar acentos.
//test.cpp
#include <windows.h>

int APIENTRY WinMain(
 HINSTANCE hInstance, 
 HINSTANCE hPrevInstance, 
 LPSTR lpCmdLine, 
 int nCmdShow
)
{
 int respuesta = MessageBox
 (
  NULL,//Owner
  "¡Hola, Mundo! :V\n\ráéíóú",//Mensaje (Cuerpo)
  "Prueba", //Título
  MB_ICONINFORMATION | MB_YESNO | MB_DEFBUTTON1 //Apariencia
 );
 
 return respuesta == MB_OK ? ERROR_SUCCESS : ERROR_GEN_FAILURE;
}

Ícono (opcional)

//app.rc
APP_ICON ICON "app.ico"


Compilación

Ícono (Opcional)

Debe de compilarse antes que el ejecutable.
x86_64-w64-mingw32-windres app.rc -O coff -o app.res
Con MSYS2 podemos quitar el prefijo x86_64-w64-mingw32-
windres app.rc -O coff -o app.res

Ejecutable

Si queremos que nuestro ejecutable tenga un ícono, agregamos el archivo .res que compilamos del ícono.
Usamos el parámetro mwindows para indicar que se genere una aplicación GUI en lugar de consola.
x86_64-w64-mingw32-g++ -mwindows -o test.exe test.cpp app.res
g++ -mwindows -o test.exe test.cpp app.res


Resultado

Referencias