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 %%
¿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.)
Además, MKS Toolkit tiene una utilidad básica ...
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 )