2 votos

Suelte los archivos en un archivo por lotes para escribir ese nombre de archivo en el archivo de proceso por lotes del guión?

Digamos que tengo un fichero batch denominado lote.bate con contenidos como:

@echo off

C:\path\to\program\program.exe -variables "%1"

y digamos que tengo un archivo llamado file.txt y un segundo archivo llamado file2.txt

y digamos que me caiga file.txt en lote.bate.

Lo que quiero que ocurra es:

  • file.txt se abre con program.exe
  • y por lotes.bate el contenido de sobrescritos para ahora decir algo como:
    @echo off

    C:\path\to\program\program.exe -variables "file.txt"
  • Ahora si se me haga doble clic en el lote.bat, se abrirá file.txt con program.exe
  • Se seguirá para ello en la doble clic, hasta que me caiga file2.txt en lote.bate. En ese punto, el proceso por lotes.bate el contenido será reemplazado de nuevo a ser:
     @echo off

     C:\path\to\program\program.exe -variables "file2.txt"

Es posible este concepto? ¿Cuál sería el archivo de proceso por lotes contenidos han de ser?

Si esto puede ser logrado de alguna otra manera simple, estoy abierto a que demasiado. Pero tengo que ser capaz de ejecutar una línea de comandos con argumentos, porque estoy ejecutando un programa de línea de comandos, no el bloc de notas o lo que no.

0voto

JEB Puntos 11

Con @SeñorCMasMas de ayuda, yo he llegado a una solución con el uso de la si, de conjunto, de echo (un archivo), y el inicio de los comandos.

El inicio de comando requiere un título argumento si la ruta de acceso o archivo que desea abrir espacios en el mismo. Además, se necesita un trazo independiente argumento y argumento de nombre de archivo si este es el caso. Por lo tanto, mi archivo de proceso por lotes es considerablemente más larga para permitir estas posibilidades.

if not "%~1"=="" set input-title=""
if not "%~1"=="" set input-path="%~dp1"
if not "%~1"=="" set input-file="%~nx1"
if not "%~1"=="" echo %input-title% /d %input-path% %input-file%>input.txt
set /p start-input=<input.txt
start %start-input%

https://ss64.com/nt/syntax-args.html fue útil para explicar que los argumentos que se pasan a un archivo de proceso por lotes son representados de manera diferente a otras variables-con sólo un signo "%", sin final "%".

La documentación de Windows para 'para' fue útil para explicar la sustitución de variables, lo que le permite romper una unidad+ruta+variable archivo en sus partes componentes, y que permite eliminar encierra entre comillas dobles a partir de un argumento de valor mediante el uso de "~".

0voto

It Wasn't Me Puntos 136

Tengo entendido que usted necesita un archivo bat, para ser capaz de leer/escribir automáticamente, de acuerdo a su contenido o para el paso de argumentos (drag & drop de archivos).

@echo off && setlocal enabledelayedexpansion && cd /d "%~dp0"

if not "%~1" == "" %__APPDIR__%mode.com 40,3 & goto :set_cmd:
type "%~f0"|%__APPDIR__%findstr.exe /b \^; >nul && goto :run_cmd:
goto :error:

:set_cmd:
set "_run="C:\Windows\system32\where.exe" /r "%cd%" "%~nx1" "

( type "%~f0"|%__APPDIR__%findstr.exe /bv \^; & echo/^;!_run!
  rem./See the results in your test & echo/;"%__APPDIR__%timeout.exe" -1
  echo/;endlocal ^&^& goto :EOF ) >"%tmp%\tmp_%~nx0" 

>nul copy /y "%tmp%\tmp_%~nx0" "%~nx0" & endlocal && goto :EOF

:error:
cls & echo= & echo= & endlocal 
echo\ Sorry %username%, no valid argumment was passed^!! 
echo= & echo\ For set command: & echo=
echo\       By Command Line^> %~nx0 "Input_File_.ext"
echo\       By Windows use Drag ^& Drop "input_file_.ext" %~nx0
%__APPDIR__%timeout -1 & goto :EOF

:run_cmd:
echo/ your code will enter/executed bellow here...

Si usted acaba de hacer clic en este archivo para el 1er tiempo sin arrastrar y soltar cualquier archivo, o ejecutarlo desde la línea de comandos sin un argumento, obtendrá los siguientes resultados:

 Sorry /UserVarName/, no valid argumment was passed!!

 For set command:

       By Command Line> Q1528263v2.cmd "Input_File_.ext"
       By Windows use Drag & Drop "input_file_.ext" Q1528263v2.cmd

Press any key to continue ...

El mismo que va a pasar si quitar las líneas que comienzan con ";", esta acción de "reset" a la original de estadísticas de...

Pero, de cualquier archivo de arrastrar y soltar, se guardará como un argumento en el comando de ejecución variable _run (es un reemplazo/sobrescribir la acción).


enter image description here


Obs.: Basta con sustituir:

set "_run=
"C:\Windows\system32\where.exe" /r "%cd%"

0voto

T3RR0R Puntos 61

Para evitar tener que confirmar la ruta de cada lanzamiento, utilice el siguiente: <input.txt (Set /P "input=")

Usted también puede lograr esto con una sola variable, y tiene una forma más robusta de estado de verificación, así:

@ECHO off
    If not "%~1"=="" (
            Set "input=%~1"
        ) Else (
        If exist "input.txt" (
                 <"input.txt" (Set /P "input=")
            ) Else (
            Set /p "input=Path:<"
        )
    )
    For %%A in ("%input%") Do (
        ECHO(%%~A>"input.txt"
        Start "" /d "%%~dpA" "%%~nxA"
    )
    pause

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: