> For the complete documentation index, see [llms.txt](https://docs.editran.onesait.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.editran.onesait.com/documentacion-editran/editran-sepa-v3/modo-de-uso/integracion/windows.md).

# Windows

El script Previo a emisión que hace que se ejecute Editran/SEPA en una presentación de emisión se llama `PRVEMISEPA.bat`.

Para poder utilizar dicho batch hay que definir `.\SEPA\PRVEMISEPA.bat` en el apartado "Previo a emisión" de la opción "Aplicación" de la presentación de Editran/G que enviará ficheros SEPA.

> **IMPORTANTE:** Es necesario definir en el directorio de emisión con el metacaracter `*` al final de la ruta, y además no se pueden utilizar rutas relativas (`..\`, `.\`, etc.)

Por ejemplo, si los ficheros están en el directorio `c:\Ficheros\SEPA\`, en el apartado Ficheros de Editran/G habrá que definir: `c:\Ficheros\SEPA\*`

También se puede definir un nombre común para los ficheros a emitir y al final definir el asterisco (`c:\Ficheros\SEPA\file*`)

El script tiene los siguientes pasos:

* Registra en el fichero de salida de Editran/G (`editrang.out`) la información general del resultado de la transmisión:

```bat
echo ################################################################################
echo SCRIPT DE USUARIO PREVIO A EMISION: %0.
timestamp

if not exist "%FENTORNO%" (
    echo Error, no existe el path %FENTORNO%
    exit -1
)
call %FENTORNO% getParametros "PRV" %*

echo PRESENTACION : %SENTIDO%-%SESION% (%LOCAL%-%REMOTO%-%APLICACION%)
echo RESULTADO    : %RESULTADO%
echo ################################################################################
```

Donde SESION es el nombre de la presentación, SENTIDO es el sentido de la transmisión (E (Emisión) o R (Recepción)), RESULTADO es el resultado de la transmisión, LOCAL es el código local, REMOTO el código remoto y APLICACIÓN la aplicación de la presentación.

* Se definen las variables necesarias, se comprueba que el directorio de emisión definido en Editran/G tiene el metacarácter `*` obligatorio y se ejecuta Editran/SEPA por cada fichero que encuentra en el directorio de emisión definido en el apartado Ficheros de Editran/G.

Si el fichero original tiene la extensión `.xml` Editran/SEPA lo convertirá a un fichero plano; si no tiene extensión `.xml` lo convertirá a un fichero con formato XML, ya que por defecto utiliza el modo de uso del comando con un solo parámetro, como se explica en [4.2 Proceso cliente](#42-proceso-cliente).

```bat
if not exist "%DIR_SEPA%" (
    echo Error, no existe el path %DIR_SEPA%
    exit -1
)
set CLASSPATH=
set DIR_ORIG=orig
set ARCHIVOS_ORIG=%LOCAL%-%REMOTO%-%APLICACION%-%SENTIDO%.orig
set FLISTA=%LOCAL%-%REMOTO%-%APLICACION%-%SENTIDO%.list

goto Inicio

:Inicio
IF NOT "%RESULTADO%"=="0000" goto Fin

FOR %%f in ("%DIR_SEPA:"=%\lib\*.jar") do CALL :Entorno "%%f"
FOR %%f in ("%DIR_SEPA:"=%\lib\Win\*.jar") do CALL :Entorno "%%f"
GOTO Start

:Entorno
set CLASSPATH=%~1;%CLASSPATH%
GOTO:EOF
:Start
rem Se extrae el path de los ficheros a emitir, previamente definido con la máscara * en la
rem presentación de EDItran/G
cfgupt -r -i%SESION% | find "NOMBRE FICHERO" > %FLISTA%

FOR /F "tokens=2 delims='='" %%p IN (%FLISTA%) DO call :Check "%%p"
goto Correcto

:Check
set DIR_FILES=%~1
IF "%DIR_FILES:~-1%" == " " (
 set DIR_FILES="%DIR_FILES:~0,-1%"
)
set DIR_FILES=%DIR_FILES:"=%
IF "%DIR_FILES:~0, 1%" == " " (
 set DIR_FILES="%DIR_FILES:~1%"
)
set DIR_FILES=%DIR_FILES:"=%
set AST=%DIR_FILES:~-1%

IF %AST% == * (
 GOTO Pathctl
) ELSE (
 echo La ruta de los ficheros de emision de Editran/G debe finalizar con la mascara *.
 GOTO badpath
)

:Pathctl
FOR %%f IN ("%DIR_FILES%") DO call :Sepa "%%f"
goto:EOF

:Sepa
rem Se guarda el nombre de los ficheros a convertir en un fichero auxiliar llamado orig.
echo %~1>>"%ARCHIVOS_ORIG%"
set DIRAUX= %cd%
cd %DIR_SEPA%

rem Descomentar las lineas inferiores si los ficheros de entrada de formato plano no son de
rem longitud fija
rem set FILE=%~1
rem IF NOT %FILE:~-4% == .xml IF NOT %FILE:~-4% == .XML (
rem call "%DIR_SEPA%/scripts/Win/utils/RellenaLineas.bat" %1 600
rem IF EXIST "%FILE%.old" (
rem   del "%FILE%.old"
rem )
rem )
rem set FILE=

rem Se ejecuta EDITRAN/SEPA por cada fichero a convertir y enviar.
%JAVASEPA% -cp "%CLASSPATH%" %EDITRAN_XMLMAIN% "%~1" > NUL
IF NOT %ERRORLEVEL% == 0 (
 IF NOT %ERRORLEVEL% == 36 (
  echo Fallo al convertir el fichero %1
  echo Error=%ERRORLEVEL%
  goto Error
 ) ELSE (
  echo Conversion SEPA del fichero %~1 finalizada con warnings.
 )
)
cd %DIRAUX%
goto:EOF
```

* Si ninguna de las conversiones realizadas sobre los ficheros a emitir termina con resultado de error, se mueven los ficheros originales a un subdirectorio histórico llamado `orig`.

```bat
:Correcto
IF NOT EXIST %ARCHIVOS_ORIG% (
 echo No hay ficheros a convertir
 GOTO Fin
)

findstr /I /M ".xml" "%ARCHIVOS_ORIG%" > NUL

IF %errorlevel%==0 (
echo Conversion SEPA XML a plano correcta.
) ELSE (
echo Conversion SEPA plano a XML correcta.
)
for /F "delims=';'" %%p IN ("%ARCHIVOS_ORIG%") do call :Move "%%p"
goto Fin
```

* Si por el contrario, alguna/s de las conversiones realizadas a partir de los ficheros a emitir finaliza con error, se eliminan los ficheros convertidos correctamente (si los hubiera) y se detiene el envío de la presentación, dejando los ficheros originales de envío como estaban para su posterior revisión.

```bat
:Error
rem Si ha habido error se notifica en el editrang.out, se borran todos los ficheros
rem convertidos y se detiene el batch.
cd %DIRAUX%
echo Conversion SEPA incorrecta.
for /F "delims=';'" %%p IN (%ARCHIVOS_ORIG%) do call :Delete "%%p"
IF EXIST %ARCHIVOS_ORIG% del %ARCHIVOS_ORIG%
IF EXIST %SESION%.emision del %SESION%.emision
exit -1
```

El script Posterior a Emisión que hace que se muevan los ficheros convertidos y enviados correctamente se llama `PSTEMISEPA.bat`.

Para poder utilizar dicho batch hay que definir `.\SEPA\PSTEMISEPA.bat` en el apartado "Posterior a emisión" de la opción "Aplicación" de la presentación de Editran/G que enviará ficheros SEPA.

El script tiene los siguientes pasos:

* Registra en el fichero de salida de Editran/G (`editrang.out`) la información general del resultado de la transmisión:

```bat
echo ################################################################################
echo SCRIPT DE USUARIO POSTERIOR A EMISION: %0.
timestamp

if not exist "%FENTORNO%" (
echo Error, no existe el path %FENTORNO%
exit -1
)
call %FENTORNO% getParametros "PST" %*

echo PRESENTACION : %SENTIDO%-%SESION% (%LOCAL%-%REMOTO%-%APLICACION%)
echo FICHEROS     : %LFICHEROS%
echo RESULTADO    : %RESULTADO%
echo ################################################################################
goto Inicio
```

Donde SESION es el nombre de la presentación, SENTIDO es el sentido de la transmisión (E (Emisión) o R (Recepción)), RESULTADO es el resultado de la transmisión, LOCAL es el código local, REMOTO el código remoto y APLICACIÓN la aplicación de la presentación.

* Se obtiene la lista de ficheros emitidos correctamente del fichero `.ficheros` del directorio de los tampones de Editran y se mueven a un directorio llamado "conv".

```bat
:Inicio
IF NOT "%RESULTADO%"=="0000" goto Fin

set ARCHIVOS_CONV=conv
set LFICHEROS=%LFICHEROS:/=\%
set LFICHEROS=%LFICHEROS:\\=\%
set FICH_TRATANDO=""
set FICH_ANTERIOR=""

setlocal enabledelayedexpansion
for /F "tokens=1 usebackq delims=," %%p in (%LFICHEROS%) do (
if "%%p" NEQ !FICH_ANTERIOR! (
set FICH_ANTERIOR="%%p"
call :Move "%%p"
)
)
endlocal

goto Fin

:Move
for %%i in (%1) do set DIRECTORY=%%~dpi
set DIRECTORY=%DIRECTORY%%ARCHIVOS_CONV%
IF NOT EXIST "%DIRECTORY%" mkdir "%DIRECTORY%"
MOVE /Y "%~1" "%DIRECTORY%" > NUL
goto:EOF

:Fin
set ARCHIVOS_CONV=
set DIRECTORY=
set DIR_SEPA=
set VARIOS_LOGICOS=
set CONLOG4J=
set EDITRAN_XMLMAIN=
set SESION=
set SENTIDO=
set LOCAL=
set REMOTO=
set APLICACION=
set RESULTADO=
set LFICHEROS=
exit 0
```

El script Posterior a Recepción que hace que se ejecute Editran/SEPA en una presentación de recepción se llama `PSTRECSEPA.bat`.

Para poder utilizar dicho batch hay que definir `.\SEPA\PSTRECSEPA.bat` en el apartado "Posterior a recepción" de la opción "Aplicación" de la presentación de Editran/G que enviará ficheros SEPA.

> **IMPORTANTE:** Es recomendable definir el directorio de recepción con la opción `%o` para recibir los ficheros con el nombre con el que los envía el remoto.
>
> Si al recibir ficheros la conversión deseada es de XML a Plano, es necesario definir en el directorio de recepción que el fichero a descargar contenga extensión `.xml`, ya que el batch PSTRECSEPA por defecto utiliza el modo de uso del comando con un solo parámetro, como se explica en [4.2 Proceso cliente](#42-proceso-cliente). Con la opción `%o` se reciben los ficheros con el nombre con el que los envía el remoto, si éste los envía con la extensión `.xml` no habrá que realizar ninguna configuración; al contrario, si el remoto no incluye la extensión, habría que definir el parámetro `%o` con la extensión `.xml` al final.

También se puede hacer uso de otras variables, consulte el manual de Editran/G.

Por ejemplo, para recibir los ficheros en el directorio `c:\Ficheros\recepcion\`, en el apartado Ficheros de Editran/G habrá que definir: `c:\Ficheros\recepcion\%o`. Si la conversión es de XML a Plano y el remoto no incluye la extensión al emitir, habría que definir la ruta `c:\Ficheros\recepcion\%o.xml`

El batch tiene los siguientes pasos:

* Registra en el fichero de salida de Editran/G (`editrang.out`) la información general del resultado de la transmisión:

```bat
echo ################################################################################
echo SCRIPT DE USUARIO POSTERIOR A RECEPCION: %0.
timestamp

if not exist "%FENTORNO%" (
echo Error, no existe el path %FENTORNO%
exit -1
)

call %FENTORNO% getParametros "PST" %*

echo PRESENTACION : %SENTIDO%-%SESION% (%LOCAL%-%REMOTO%-%APLICACION%)
echo FICHEROS     : %LFICHEROS%
echo RESULTADO    : %RESULTADO%
echo ################################################################################
```

Donde SESION es el nombre de la presentación, SENTIDO es el sentido de la transmisión (E (Emisión) o R (Recepción)), RESULTADO es el resultado de la transmisión, LOCAL es el código local, REMOTO el código remoto y APLICACIÓN la aplicación de la presentación.

Se definen las variables necesarias y se ejecuta Editran/SEPA por cada fichero que se recibe. Si el fichero original tiene la extensión `.xml` Editran/SEPA lo convertirá a un fichero plano; si no tiene extensión `.xml` lo convertirá a un fichero con formato XML.

```bat
if not exist "%DIR_SEPA%" (
echo Error, no existe el path %DIR_SEPA%
exit -1
)
set CLASSPATH=
set DIR_ORIG=orig
set ARCHIVOS_ORIG=%LOCAL%-%REMOTO%-%APLICACION%-%SENTIDO%.orig

goto Inicio

:Inicio
IF NOT "%RESULTADO%"=="0000" goto Fin

set LFICHEROS=%LFICHEROS:/=\%
set LFICHEROS=%LFICHEROS:\\=\%
set FICH_TRATANDO=""
set FICH_ANTERIOR=""
set INI_MSG=""

FOR %%f in ("%DIR_SEPA:"=%\lib\*.jar") do CALL :Entorno "%%f"
FOR %%f in ("%DIR_SEPA:"=%\lib\Win\*.jar") do CALL :Entorno "%%f"
GOTO Start

:Entorno
set CLASSPATH=%~1;%CLASSPATH%
GOTO:EOF

:Start
setlocal enabledelayedexpansion
for /F "tokens=1 usebackq delims=," %%p in (%LFICHEROS%) do (
if "%%p" NEQ !FICH_ANTERIOR! (
set FICH_TRATANDO="%%p"
rem Segun la extensión, el principio del mensaje de salida es uno u otro
findstr /I /M ".xml" !FICH_TRATANDO! > NUL
if !errorlevel!==0 (
set INI_MSG=Conversion SEPA XML a plano del fichero !FICH_TRATANDO!
) else (
set INI_MSG=Conversion SEPA plano a XML del fichero !FICH_TRATANDO!
)

call :Sepa !FICH_TRATANDO!
set FICH_ANTERIOR=!FICH_TRATANDO!
)
)
endlocal

goto Correcto

:Sepa
echo %~1>>%ARCHIVOS_ORIG%
set DIRAUX= "%cd%"
cd "%DIR_SEPA%"
%JAVASEPA% -cp "%CLASSPATH%" %EDITRAN_XMLMAIN% "%~1" > NUL
IF NOT %ERRORLEVEL% == 0 (
IF %ERRORLEVEL% == 36 (
echo %INI_MSG% finalizada con Warnings.
) ELSE (
echo %INI_MSG% finalizada con error.
echo Error=%ERRORLEVEL%
goto Error
)
) ELSE (
echo !INI_MSG! correcta.
)
cd %DIRAUX%

rem Descomentar las lineas inferiores si se quiere que, para ficheros de salida de formato plano,
rem se escriba un salto de linea al final de cada registro
rem set NL=%~1
rem IF %NL:~-4% == .xml nl -600 -in -od "%NL:.xml=%"
rem IF EXIST "%NL:.xml=%.old" del "%NL:.xml=%.old"
rem IF %NL:~-4% == .XML nl -600 -in -od "%NL:.XML=%"
rem IF EXIST "%NL:.XML=%.old" del "%NL:.XML=%.old"

goto:EOF
```

* Si ninguna de las conversiones realizadas sobre los ficheros a recibir termina con resultado de error, se moverán los ficheros originales a un subdirectorio histórico llamado `orig`.

```bat
:Correcto
findstr /I /M ".xml" %ARCHIVOS_ORIG% > NUL

IF %errorlevel%==0 (
echo Conversion SEPA XML a plano correcta.
) ELSE (
echo Conversion SEPA plano a XML correcta.
)
for /F "delims=';'" %%p IN (%ARCHIVOS_ORIG%) do call :Move "%%p"
goto Fin
```

* Si alguna de las conversiones realizadas a partir de los ficheros a recibir termina con error el script lo indicará en su resultado. En esta situación por defecto se eliminarán los ficheros convertidos correctamente, si los hubiera, dejando como estaban los ficheros originales de recepción para su posterior revisión.

```bat
:Error
echo Conversion SEPA incorrecta.
cd %DIRAUX%
for /F "delims=';'" %%p IN ('type "%ARCHIVOS_ORIG:"=%"') do call :Delete "%%p"
IF EXIST "%ARCHIVOS_ORIG:"=%" del "%ARCHIVOS_ORIG:"=%"
exit -1

:Delete
set BORRAR=%~1
IF %BORRAR:~-4% == .xml IF EXIST "%BORRAR:.xml=%" del "%BORRAR:.xml=%"
IF %BORRAR:~-4% == .XML IF EXIST "%BORRAR:.XML=%" del "%BORRAR:.XML=%"
IF NOT %BORRAR:~-4% == .xml IF NOT %BORRAR:~-4% == .XML IF EXIST "%BORRAR%.xml" del
"%BORRAR%.xml"
goto:EOF
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.editran.onesait.com/documentacion-editran/editran-sepa-v3/modo-de-uso/integracion/windows.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
