3

How to select the "program files" folder when you have lot of PCs with 32 and 64 bit OSes and 32 or 64 bit apps?

I made a file to create a backup of firebird databases, but I need help. Sometimes there is a PC with a 64-bit OS and 32-bit firebird or winrar. Sometimes there is a PC with a 64-bit OS and 64-bit apps or 32-bit OS with 32-bit apps.

How make this code work better?

ECHO OFF
set isc_user=sysdba
set isc_password=masterkey
date /t >>tempo.txt
time /t >>tempo.txt
mode 20,5
del os.txt /q
wmic os get osarchitecture >os.txt
find "64" os.txt
if not errorlevel 1 goto 64b else goto 32b
:32b
echo off
@cmdow @ /DIS
mode 84,40
color 80
DEL *.LOG /Q
@title      32  LIMPANDO PASTAS 
ECHO.
ECHO    ************************* CONFIGURACAO PARA BACKUP EM SISTEMA OPERACIONAL 32 BITS ************************* 



"C:\Program Files\WinRAR\rar" e auxbkp.rar *.* /y
purger.exe -rde 1               c:\ecosis\dados\backup_*.rar
purger.exe -rde 5               c:\BKPECO\backup_*.rar




ECHO    ************************* CONFIGURACAO PARA BACKUP EM SISTEMA OPERACIONAL 32 BITS ************************* 
CLS
attrib +h *.lst
attrib +h *.dll
attrib +h *.ico
attrib +h *.jpg
attrib +h *.txt
attrib -r auxbkp.rar
taskkill -im purger.exe
cls


@title       32 BACKUP - BANCO DE DADOS - ECO[   ] NFE[   ] SPED[   ] 
"C:\Program Files\Firebird\Firebird_2_5\bin\gfix.exe" -v -f -z 127.0.0.1:\ecosis\dados\ecodados.eco
"C:\Program Files\Firebird\Firebird_2_5\bin\gfix.exe" -v -i 127.0.0.1:\ecosis\dados\ecodados.eco
"C:\Program Files\Firebird\Firebird_2_5\bin\gfix.exe" -m -i 127.0.0.1:\ecosis\dados\ecodados.eco
"C:\Program Files\Firebird\Firebird_2_5\bin\gfix.exe" -sweep 127.0.0.1:\ecosis\dados\ecodados.eco
"C:\Program Files\Firebird\Firebird_2_5\bin\gfix.exe" -rollback all 127.0.0.1:\ecosis\dados\ecodados.eco
"C:\Program Files\Firebird\Firebird_2_5\bin\gfix.exe" -m -f -z 127.0.0.1:\ecosis\dados\ecodados.eco
"C:\Program Files\Firebird\Firebird_2_5\bin\gbak.exe" -g -b -z -l -v 127.0.0.1:\ecosis\dados\ecodados.eco ecodados_bkp1.gbk -y c:\ecosis\dados\gbk_eco1.log 
"C:\Program Files\Firebird\Firebird_2_5\bin\gbak.exe" -g -c -v -z -r -rep ecodados_bkp1.gbk ecodados_bkp1.eco -fix_fss_m win1252 -user sysdba -pass masterkey -y c:\ecosis\dados\gbk_eco_restore.log


@title      32 BACKUP - BANCO DE DADOS - ECO[  ] NFE[   ] SPED[   ] 
"C:\Program Files\Firebird\Firebird_2_5\bin\gfix.exe" -v -f -z 127.0.0.1:\ecosis\dados\econfe.eco
"C:\Program Files\Firebird\Firebird_2_5\bin\gfix.exe" -v -i 127.0.0.1:\ecosis\dados\econfe.eco
"C:\Program Files\Firebird\Firebird_2_5\bin\gfix.exe" -m -i 127.0.0.1:\ecosis\dados\econfe.eco
"C:\Program Files\Firebird\Firebird_2_5\bin\gfix.exe" -sweep 127.0.0.1:\ecosis\dados\econfe.eco
"C:\Program Files\Firebird\Firebird_2_5\bin\gfix.exe" -rollback all 127.0.0.1:\ecosis\dados\econfe.eco
"C:\Program Files\Firebird\Firebird_2_5\bin\gfix.exe" -m -f -z 127.0.0.1:\ecosis\dados\econfe.eco
"C:\Program Files\Firebird\Firebird_2_5\bin\gbak.exe" -g -b -z -l -v 127.0.0.1:\ecosis\dados\econfe.eco econfe_bkp1.gbk -y c:\ecosis\dados\gbk_nfe1.log
"C:\Program Files\Firebird\Firebird_2_5\bin\gbak.exe" -g -c -v -z -r -rep econfe_bkp1.gbk econfe_bkp1.eco -fix_fss_m win1252 -user sysdba -pass masterkey -y c:\ecosis\dados\gbk_nfe_restore1.log


@title      32 BACKUP - BANCO DE DADOS - ECO[  ] NFE[  ] SPED[   ] 
"C:\Program Files\Firebird\Firebird_2_5\bin\gfix.exe" -v -f -z 127.0.0.1:\ecosis\dados\ecosped.eco
"C:\Program Files\Firebird\Firebird_2_5\bin\gfix.exe" -v -i 127.0.0.1:\ecosis\dados\ecosped.eco
"C:\Program Files\Firebird\Firebird_2_5\bin\gfix.exe" -m -i 127.0.0.1:\ecosis\dados\ecosped.eco
"C:\Program Files\Firebird\Firebird_2_5\bin\gfix.exe" -sweep 127.0.0.1:\ecosis\dados\ecosped.eco
"C:\Program Files\Firebird\Firebird_2_5\bin\gfix.exe" -rollback all 127.0.0.1:\ecosis\dados\ecosped.eco
"C:\Program Files\Firebird\Firebird_2_5\bin\gfix.exe" -m -f -z 127.0.0.1:\ecosis\dados\ecosped.eco
"C:\Program Files\Firebird\Firebird_2_5\bin\gbak.exe" -g -b -z -l -v 127.0.0.1:\ecosis\dados\ecosped.eco ecosped_bkp1.gbk -y c:\ecosis\dados\gbk_sped.log
"C:\Program Files\Firebird\Firebird_2_5\bin\gbak.exe" -g -c -v -z -r -rep ecosped_bkp1.gbk ecosped_bkp1.eco -fix_fss_m win1252 -user sysdba -pass masterkey -y c:\ecosis\dados\gbk_sped_restore1.log


@title      32 BACKUP - BANCO DE DADOS - ECO[  ] NFE[  ] SPED[  ] 
"C:\Program Files\WinRAR\rar" u -rr5% -rv15% -ag_dd_mmm_yyyy(hh_mm)  -r -m5 -t -dh -x@nao.lst backup.rar @lista.lst
"C:\Program Files\WinRAR\rar" u -rr5% -rv15% -ag_yyyy  -r -m5 -t -dh -x@nao.lst ecodados.rar @soecogbk.lst
cls


@title      32 COPIANDO ARQUIVOS 
ECHO    ************************* CONFIGURACAO PARA BACKUP EM SISTEMA OPERACIONAL 32 BITS ************************* 


XCOPY C:\ECOSIS\DADOS\BACKUP_*.RAR          D:\ECOBKPRAR\ /c /r /e /i /d /y
purger.exe -rde 7                   D:\ECOBKPRAR\BACKUP_*.RAR


ECHO    ************************* CONFIGURACAO PARA BACKUP EM SISTEMA OPERACIONAL 32 BITS ************************* 



CLS
c:\ecosis\dados\
color 4f
@title      32 COMPACTACAO E COPIA DOS BANCO DE DADOS E OUTROS 
find "errors" gbk*.log
if not errorlevel 1 (c:\ecosis\dados\TELEFONE.jpg) else (color 20)
find "warning" gbk*.log
if not errorlevel 1 (c:\ecosis\dados\TELEFONE.jpg) else (color 20)
@title      32 LIMPANDO ARQUIVOS TEMPORARIOS 

attrib -h *.*
taskkill -im purger.exe
del c:\ecosis\dados\*.log /q
del c:\ecosis\dados\nul*.* /q
del C:\ecosis\dados\*_bkp*.ECO /q
del c:\ecosis\dados\*.gbk /q
del c:\ecosis\dados\*.exe /q
del c:\ecosis\dados\*.dll /q
del c:\ecosis\dados\*.lst /q
del c:\ecosis\dados\*.ico /q
del c:\ecosis\dados\*.jpg /q
del c:\ecosis\dados\*.txt /q
cls
@title      32 ENVIANDO ECOGBK FTP ECO 
@cmdow @ /ENA
c:\ecosis\dados\ecoftp.bat
exit




ECHO #################################################################################################
ECHO #################################################################################################
ECHO #################################################################################################
ECHO #################################################################################################
ECHO #################################################################################################
ECHO #################################################################################################
ECHO #################################################################################################
ECHO #################################################################################################
CLS



:64b
echo off
@cmdow @ /DIS
mode 84,40
color 80
set isc_user=sysdba
set isc_password=masterkey
DEL *.LOG /Q
@title      64 LIMPANDO PASTAS 
"C:\Program Files\WinRAR\rar" e auxbkp.rar *.* /y


ECHO.    ************************* CONFIGURACAO PARA BACKUP EM SISTEMA OPERACIONAL 64 BITS ************************* 


purger.exe -rde 1 c:\ecosis\dados\backup_*.rar
purger.exe -rde 5                   c:\BKPECO\backup_*.rar


ECHO.    ************************* CONFIGURACAO PARA BACKUP EM SISTEMA OPERACIONAL 64 BITS ************************* 
CLS
attrib +h *.exe
attrib +h *.lst
attrib +h *.dll
attrib +h *.ico
attrib +h *.jpg
attrib +h *.txt
attrib -r auxbkp.rar
taskkill -im purger.exe
cls

@title      64 ECO[   ] NFE[   ] SPED[   ] 
"C:\Arquivos de Programas\firebird\Firebird_2_5\bin\gfix.exe" -v -f -z 127.0.0.1:\ecosis\dados\ecodados.eco
"C:\Arquivos de Programas\firebird\Firebird_2_5\bin\gfix.exe" -v -i 127.0.0.1:\ecosis\dados\ecodados.eco
"C:\Arquivos de Programas\firebird\Firebird_2_5\bin\gfix.exe" -m -i 127.0.0.1:\ecosis\dados\ecodados.eco
"C:\Arquivos de Programas\firebird\Firebird_2_5\bin\gfix.exe" -sweep 127.0.0.1:\ecosis\dados\ecodados.eco
"C:\Arquivos de Programas\firebird\Firebird_2_5\bin\gfix.exe" -rollback all 127.0.0.1:\ecosis\dados\ecodados.eco
"C:\Arquivos de Programas\firebird\Firebird_2_5\bin\gfix.exe" -m -f -z 127.0.0.1:\ecosis\dados\ecodados.eco
"C:\Arquivos de Programas\firebird\Firebird_2_5\bin\gbak.exe" -g -b -z -l -v 127.0.0.1:\ecosis\dados\ecodados.eco ecodados_bkp1.gbk -y c:\ecosis\dados\gbk_eco1.log 
"C:\Arquivos de Programas\firebird\Firebird_2_5\bin\gbak.exe" -g -c -v -z -r -rep ecodados_bkp1.gbk ecodados_bkp1.eco -fix_fss_m win1252 -user sysdba -pass masterkey -y c:\ecosis\dados\gbk_eco_restore.log

@title      64 ECO[  ] NFE[   ] SPED[   ] 
"C:\Arquivos de Programas\firebird\Firebird_2_5\bin\gfix.exe" -v -f -z 127.0.0.1:\ecosis\dados\econfe.eco
"C:\Arquivos de Programas\firebird\Firebird_2_5\bin\gfix.exe" -v -i 127.0.0.1:\ecosis\dados\econfe.eco
"C:\Arquivos de Programas\firebird\Firebird_2_5\bin\gfix.exe" -m -i 127.0.0.1:\ecosis\dados\econfe.eco
"C:\Arquivos de Programas\firebird\Firebird_2_5\bin\gfix.exe" -sweep 127.0.0.1:\ecosis\dados\econfe.eco
"C:\Arquivos de Programas\firebird\Firebird_2_5\bin\gfix.exe" -rollback all 127.0.0.1:\ecosis\dados\econfe.eco
"C:\Arquivos de Programas\firebird\Firebird_2_5\bin\gfix.exe" -m -f -z 127.0.0.1:\ecosis\dados\econfe.eco
"C:\Arquivos de Programas\firebird\Firebird_2_5\bin\gbak.exe" -g -b -z -l -v 127.0.0.1:\ecosis\dados\econfe.eco econfe_bkp1.gbk -y c:\ecosis\dados\gbk_nfe1.log
"C:\Arquivos de Programas\firebird\Firebird_2_5\bin\gbak.exe" -g -c -v -z -r -rep econfe_bkp1.gbk econfe_bkp1.eco -fix_fss_m win1252 -user sysdba -pass masterkey -y c:\ecosis\dados\gbk_nfe_restore1.log

@title      64 ECO[  ] NFE[  ] SPED[   ] 
"C:\Arquivos de Programas\firebird\Firebird_2_5\bin\gfix.exe" -v -f -z 127.0.0.1:\ecosis\dados\ecosped.eco
"C:\Arquivos de Programas\firebird\Firebird_2_5\bin\gfix.exe" -v -i 127.0.0.1:\ecosis\dados\ecosped.eco
"C:\Arquivos de Programas\firebird\Firebird_2_5\bin\gfix.exe" -m -i 127.0.0.1:\ecosis\dados\ecosped.eco
"C:\Arquivos de Programas\firebird\Firebird_2_5\bin\gfix.exe" -sweep 127.0.0.1:\ecosis\dados\ecosped.eco
"C:\Arquivos de Programas\firebird\Firebird_2_5\bin\gfix.exe" -rollback all 127.0.0.1:\ecosis\dados\ecosped.eco
"C:\Arquivos de Programas\firebird\Firebird_2_5\bin\gfix.exe" -m -f -z 127.0.0.1:\ecosis\dados\ecosped.eco
"C:\Arquivos de Programas\firebird\Firebird_2_5\bin\gbak.exe" -g -b -z -l -v 127.0.0.1:\ecosis\dados\ecosped.eco ecosped_bkp1.gbk -y c:\ecosis\dados\gbk_sped.log
"C:\Arquivos de Programas\firebird\Firebird_2_5\bin\gbak.exe" -g -c -v -z -r -rep ecosped_bkp1.gbk ecosped_bkp1.eco -fix_fss_m win1252 -user sysdba -pass masterkey -y c:\ecosis\dados\gbk_sped_restore1.log


@title      64 ECO[  ] NFE[  ] SPED[  ] 
"C:\Arquivos de Programas\WinRAR\rar" u -rr5% -rv15% -ag_dd_mmm_yyyy(hh_mm)  -r -m5 -t -dh -x@nao.lst backup.rar @lista.lst
"C:\Arquivos de Programas\WinRAR\rar" u -rr5% -rv15% -ag_yyyy  -r -m5 -t -dh -x@nao.lst ecodados.rar @soecogbk.lst
cls
@title      64 COPIANDO ARQUIVOS 


ECHO.    ************************* CONFIGURACAO PARA BACKUP EM SISTEMA OPERACIONAL 64 BITS ************************* 



XCOPY C:\ECOSIS\DADOS\BACKUP_*.RAR          D:\ECOBKPRAR\ /c /r /e /i /d /y
purger.exe -rde 7                   D:\ECOBKPRAR\BACKUP_*.RAR



ECHO.    ************************* CONFIGURACAO PARA BACKUP EM SISTEMA OPERACIONAL 64 BITS ************************* 
CLS
c:\ecosis\dados\
color 4f
@title      64BACKUP FINALIZADO 
find "errors" gbk*.log
if not errorlevel 1 (c:\ecosis\dados\TELEFONE.jpg) else (color 20)
find "warning" gbk*.log
if not errorlevel 1 (c:\ecosis\dados\TELEFONE.jpg) else (color 20)
@title      64 LIMPANDO ARQUIVOS TEMPORARIOS 

attrib -h *.*
taskkill -im purger.exe
del c:\ecosis\dados\*.log /q
del c:\ecosis\dados\nul*.* /q
del C:\ecosis\dados\*_bkp*.ECO /q
del c:\ecosis\dados\*.gbk /q
del c:\ecosis\dados\*.exe /q
del c:\ecosis\dados\*.dll /q
del c:\ecosis\dados\*.lst /q
del c:\ecosis\dados\*.ico /q
del c:\ecosis\dados\*.jpg /q
del c:\ecosis\dados\*.txt /q
cls

date /t >>tempo.txt
time /t >>tempo.txt
echo ** ** ** ECOBACKUP** ** ** >>tempo.txt


@title      64 ENVIANDO ECOGBK FTP ECO 
@cmdow @ /ENA
c:\ecosis\dados\ecoftp.bat
exit
Ross Ridge
  • 38,414
  • 7
  • 81
  • 112
DangeloGH
  • 31
  • 1
  • See https://stackoverflow.com/questions/9594066/how-to-get-program-files-x86-env-variable – xmojmr Aug 04 '17 at 06:02
  • Does the `%FIREBIRD%` environment variable not exist? You should be able to determine the bin directory from that without adding unnecessary code. If it doesn't exist then you could look for the location in the registry, e.g. `REG QUERY "HKLM\Software\Firebird Project\Firebird Server\Instances" /V DefaultInstance`. I'm sure the registry idea can be used to detect the true location of your WinRAR executable too, e.g. `REG QUERY "HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe" /VE` – Compo Aug 04 '17 at 10:52
  • ++Compo This is probably the most robust solution of all -- the Registry search especially. – Steven K. Mariner Aug 04 '17 at 13:47

3 Answers3

1

Something like these snippets should do the trick:

REM Find the gfix.exe executable
C:
cd \
set GFX_PGMFNM=
for /R %%F in (gfix.exe) do set GFX_PGMFNM=%%~dpnxF
if "%GFX_PGMFNM%" == "" goto NOGFX

REM Then later:
"%GFX_PGMFNM%" -v -f -z 127.0.0.1:\ecosis\dados\ecosped.eco

goto ENDIT

REM Exit messages
:NOGFX
echo.
echo ERROR:  Cannot find gfix.exe on the C: drive
echo.
goto ENDIT


REM Cleanup
:ENDIT
set GFX_PGMFNM=
1

Use your WMI Query for the OS architecture and create a new Variable for Programfiles based on the result.

then use the %ProgFiles% Variable instead of the hardcoded paths C:\Program Files\ or C:\Arquivos de Programas

this should do the trick:

wmic os get osarchitecture |find /i "64" > NUL

IF %ERRORLEVEL%==0 (
 Echo 64Bit OS detected
 set ProgFiles="%ProgramFiles(x86)%"
) ELSE (
 Echo 32Bit OS detected
 set ProgFiles="%ProgramFiles%"
)

echo %ProgFiles%
L007
  • 51
  • 4
1

There is an environment variable called ProgramFiles already present in Windows. Is there some reason you can't use that variable? For 64bit environments with some 32-bit apps installed there's also variable ProgramFiles(x86) .

mao
  • 11,321
  • 2
  • 13
  • 29
  • 1
    Excellent. I did a `SET Program` and see there are three potentially useful ones on my system: `ProgramFiles=C:\Program Files`, `ProgramFiles(x86)=C:\Program Files (x86)`, and `ProgramW6432=C:\Program Files`. One could write a `FOR` loop which simply checked those three locations rather than screaming through the whole C: looking for them. However, if the user installs to a different location (I am notorious for installing to `E:\App`, for example), these techniques will fail. I think checking the registry for each executable's location is likely to yield a more bulletproof solution. – Steven K. Mariner Aug 04 '17 at 13:45