Variables no reconocidas en dos bucles de búsqueda
Publicado por Ferran (3 intervenciones) el 17/02/2020 13:15:38
Una explicación previa
Estoy haciendo un pequeño programa de contabilidad en batch para windows 10. Todo está hecho a excepción del último paso que consiste en recalcular los importes de un fichero (temp2.txt) en el general (temp1.txt). Ambos coinciden en el campo "código" (que en temp2 se encuentra en el token T y en temp1 se encuentra en G).
Cuando hay coincidencia en el código entonces campos de importe que se hallan en temp2.txt (campos V y W además de una suma de estos para dar un saldo) deben añadirse por acumulación a los de temp1.txt (campos I,J y K) .
Estas tres operaciones se realizarán en las variables %entrada%, %salida% y %saldo% para cambiar los campos I, J y K de "temp1.txt" mediante un fichero de transición "temp3.txt" allí donde el campo código de temp2.txt y temp1.txt hayan coincidido. En el caso de que no exista coincidencia simplemente la linea que pertoque en temp1.txt se guardará en temp3.txt. Al final se vuelca temp3.txt a temp1.txt y de esta manera queda actualizado.
Adjunto el script y hago explicación de ello en los REM
La salida a la consola es la siguiente
Falta un operando.
Falta un operando.
Falta un operando.
"entrada" no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutable.
"salida" no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutable.
"saldo" no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutable.
Este es el problema y no sé como arreglarlo. Gracias de antemano a quien pueda ayudar.
Estoy haciendo un pequeño programa de contabilidad en batch para windows 10. Todo está hecho a excepción del último paso que consiste en recalcular los importes de un fichero (temp2.txt) en el general (temp1.txt). Ambos coinciden en el campo "código" (que en temp2 se encuentra en el token T y en temp1 se encuentra en G).
Cuando hay coincidencia en el código entonces campos de importe que se hallan en temp2.txt (campos V y W además de una suma de estos para dar un saldo) deben añadirse por acumulación a los de temp1.txt (campos I,J y K) .
Estas tres operaciones se realizarán en las variables %entrada%, %salida% y %saldo% para cambiar los campos I, J y K de "temp1.txt" mediante un fichero de transición "temp3.txt" allí donde el campo código de temp2.txt y temp1.txt hayan coincidido. En el caso de que no exista coincidencia simplemente la linea que pertoque en temp1.txt se guardará en temp3.txt. Al final se vuelca temp3.txt a temp1.txt y de esta manera queda actualizado.
Adjunto el script y hago explicación de ello en los REM
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
@echo off
setlocal enabledelayedexpansion
if not exist temp1.txt (
echo No existe temp1.txt & goto :final
)
REM EXTRACCION DE TODOS LOS DATOS DE TEMP1 Y TEMP2
for /f "tokens=1,2,3,4,5,6" %%F in (temp1.txt) do (
set entrada=%%I
set salida=%%J
set saldo=%%K
for /f "tokens=1,2,3,4,5,6" %%R in (temp2.txt) do (
call set "ent_Diario=%%V"
call set "sal_Diario=%%W"
REM SE COMPARARAN EL CAMPO CODIGO DE TEMP1 (%%T) Y EL CAMPO CODIGO DE TEMP2 (%%G)
if %%T EQU %%G (
REM SI HAY COINCIDENCIA ENTONCES SE CAMBIAN LOS IMPORTES DE TEMP1 Y SE REDIRIGEN A TEMP3
REM DEJANDO EL RESTO DE CAMPOS IGUAL
set/a "entrada+=%ent_Diario%"
set/a "salida+=%sal_Diario%"
set/a "saldo=%saldo%+(%entrada%-%salida%)"
call echo %%F %%G %%H %%entrada%% %%salida%% %%saldo%%>>temp3.txt
entrada=0
salida=0
saldo=0
break=TRUE
)
)
REM SI NO COINCIDE NO HAY CAMBIOS Y SE COPIA LA LINEA ORIGINAL DE TEMP1 A TEMP3
call echo %%F %%G %%H %%I %%J %%K>>temp3.txt
)
REM AHORA SE VUELCA TEMP3 EN TEMP1 PARA SUBSTITUIRLO Y DESPUES SE BORRA TEMP3
copy temp3.txt temp1.txt
del temp3.txt
:final
endlocal
echo(
REM echo Recalculados los importes al Plan de Cuentas
echo(
exit /b
La salida a la consola es la siguiente
Falta un operando.
Falta un operando.
Falta un operando.
"entrada" no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutable.
"salida" no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutable.
"saldo" no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutable.
Este es el problema y no sé como arreglarlo. Gracias de antemano a quien pueda ayudar.
Valora esta pregunta


0