que programacion off example ejemplos comandos batch bat avanzados avanzada archivos batch-file dos

batch file - programacion - DOS archivo BAT equivalente al comando de base de datos de Unix?



programacion batch avanzada (8)

Solución completa (incluso cuando la ruta contiene espacios)

en archivos .bat

for /F "delims=" %%i in (%FILE_path%) do @echo "%%~ni"

en el símbolo del sistema use % vez de %%

( gracias a @Ciantic )

¿Hay alguna manera fácil de acceder al nombre de pila (nombre de archivo sin extensión) de un nombre de archivo de DOS utilizando el lenguaje de comandos de DOS BAT?

Estoy de acuerdo: el format c:/ es probablemente un buen comienzo, seguido de un CD de arranque de Linux (suponiendo que estas máquinas antiguas tengan un lector de CD, no es un hecho). Pero imaginemos que solo tenemos DOS ... (Eso significa: no Windows, ni siquiera Windows 3.1, y mucho menos Windows 95, 98, NT, ME, XP, Vista, 7, etc.)



DOS 6.22 no admite% ~ nI en las instrucciones de proceso por lotes. Aquí hay una solución al problema que presenté en mi pregunta original acerca de la utilidad 4.10 bcheck de isql que solo requiere un nombre base, mientras que en isql 2.10 la utilidad bcheck trabajó con star.star como argumento. Creé el siguiente programa QBASIC para resolver bcheck 4.10 que ahora requiere solo un nombre de base para funcionar:

BatFile$ = "CHKFILE.BAT" IF INSTR(COMMAND$, "?") > 0 THEN PRINT PRINT "This program generates a batch file to check Informix files" PRINT " -b BBBB.BAT this option is used to change the batch file name" PRINT " by default the batch file name is CHKFILE.BAT" PRINT SYSTEM END IF IF INSTR(COMMAND$, "-B") > 0 THEN BatFile$ = LTRIM$(MID$(COMMAND$, INSTR(COMMAND$, "-B") + 2)) + " " BatFile$ = LEFT$(BatFile$, INSTR(BatFile$, " ") - 1) END IF OPEN BatFile$ FOR OUTPUT AS #2 filename$ = DIR$("*.dat") IF LEN(filename$) = 0 THEN SYSTEM DO WHILE LEN(filename$) > 0 PRINT #2, "bcheck -y", filename$ filename$ = DIR$ LOOP CLOSE SYSTEM

O, uno puede escribir un programa ACE para extraer el nombre base de systables.dirpath y PRINT "BCHECK -y", systables.dirpath


En base a la respuesta aceptada de hobodave, aquí se muestra cómo puede usar el comando para establecer una variable en un archivo por lotes:

for /F %%i in ("%1") do @set FN=%%~nxi

Utiliza el primer argumento de línea de comando% 1, y establece la variable FN igual al nombre base (archivo.txt por ejemplo).


En el comando FOR loop, puede usar %%~n .


Entiendo que la respuesta "no se puede" no es lo suficientemente buena. Entonces, si realmente / tiene / debe hacerse en DOS en modo real, obtenga el shell de comandos 4DOS y los programas que lo acompañan y utilícelos en lugar de COMMAND.COM

http://www.4dos.info/v4dos.htm

No lo he usado en años, pero siempre fue / lejos / mejor que COMMAND.COM Si busca esta página: http://www.4dos.info/4batfaq.htm para "nombre base" verá que hay un Modo Real DOS responde a su problema si usa 4DOS / en su lugar / de COMMAND.COM

La única otra ruta de solución en la que puedo pensar es encontrar o escribir un .exe en modo real que realice un nombre de base.

COMMAND.COM, incluso en DOS 6.22 con todos sus comandos externos de soporte, siempre fue un sistema increíblemente paralizado para scripts / archivos por lotes. Tenga en cuenta que los programas de línea de comandos MinGW32 no serán de ayuda. Todo eso es para Modo protegido (Windows de 32 bits). Si lo intentas en DOS, obtendrás el críptico "Este programa no se puede ejecutar en modo DOS". o algo similar.


Para ampliar las hobodave''s y ars''s , aquí está el fragmento relevante de ayuda del comando for :

In addition, substitution of FOR variable references has been enhanced. You can now use the following optional syntax: %~I - expands %I removing any surrounding quotes (") %~fI - expands %I to a fully qualified path name %~dI - expands %I to a drive letter only %~pI - expands %I to a path only %~nI - expands %I to a file name only %~xI - expands %I to a file extension only %~sI - expanded path contains short names only %~aI - expands %I to file attributes of file %~tI - expands %I to date/time of file %~zI - expands %I to size of file %~$PATH:I - searches the directories listed in the PATH environment variable and expands %I to the fully qualified name of the first one found. If the environment variable name is not defined or the file is not found by the search, then this modifier expands to the empty string The modifiers can be combined to get compound results: %~dpI - expands %I to a drive letter and path only %~nxI - expands %I to a file name and extension only %~fsI - expands %I to a full path name with short names only %~dp$PATH:I - searches the directories listed in the PATH environment variable for %I and expands to the drive letter and path of the first one found. %~ftzaI - expands %I to a DIR like output line In the above examples %I and PATH can be replaced by other valid values. The %~ syntax is terminated by a valid FOR variable name. Picking upper case variable names like %I makes it more readable and avoids confusion with the modifiers, which are not case sensitive.


Para línea de comando

for /F %i in ("c:/foo/bar.txt") do @echo %~ni

salida: bar

Para archivos .bat

set FILE="c:/foo/bar.txt" for /F %%i in ("%FILE%") do @echo %%~ni

salida: bar

ps si la ruta contiene espacio , utiliza la versión de @ ciantic .

(Lectura adicional: http://www.computerhope.com/forhlp.htm )