if-statement - todos - mover varios archivos en linux
archivo por lotes para verificar la existencia del directorio si no existe, luego use un directorio alternativo para copiar archivos (1)
Puede utilizar la variable de entorno %ALLUSERSPROFILE%
.
En WinXP, el valor predeterminado es C: / Documents and Settings / All Users
En Win7 / 2008 el valor predeterminado es C: / ProgramData
Hay una tabla disponible aquí: http://ss64.com/nt/syntax-variables.html
Veo que también copias un archivo diferente. No estoy seguro de por qué haces eso. Tal vez podría detectar el uso de un método aquí: https://stackoverflow.com/a/2788764/1553090 - De lo contrario, tal vez debería aprovechar las variables %ProgramFiles%
y %ProgramFiles(x86)%
.
Solo para explicar cómo puede elegir utilizar estas variables ... Puede probar la existencia de la carpeta de inicio de Win7, y si no está allí, simplemente recurra al XP (independientemente de si existe).
set STARTUP_WIN7=%ALLUSERSPROFILE%/Microsoft/Windows/Start Menu/Programs/Startup
set STARTUP_WINXP=%ALLUSERSPROFILE%/Start Menu/Programs/Startup
if EXIST "%STARTUP_WIN7%" (
set STARTUP=%STARTUP_WIN7%
) else (
set STARTUP=%STARTUP_WINXP%
)
Intento escribir un archivo por lotes que copie un archivo exe desde una ubicación de red a una ubicación local. Actualmente funciona, pero dependiendo de la versión de Windows (xp o win7) el usuario tiene que seleccionar el archivo .bat correcto debido a las diferentes rutas locales necesarias para la copia. (van a la carpeta de inicio para que se ejecute cada vez que el usuario inicie la máquina). Esta es la primera vez que trabajo con la escritura de archivos por lotes y estoy completamente perdido al mirar la sintaxis de las declaraciones if. Si pudiera obtener ayuda para entender esto, sería genial.
Esto es lo que tengo actualmente que funciona para XP:
REM @ECHO OFF
ECHO STARTING MOVEFILES
SET EXITRC=0
SET EXITMSG=EXITRC INITIALIZED
ECHO %EXITRC% -- %EXITMS
COPY "//networkDrive/install/Individual/program/MOVEFILES.EXE" "C:/DOCUMENTS AND SETTINGS/ALL USERS/START MENU/PROGRAMS/STARTUP/"
ECHO COPIED FILES TO YOUR PC
SET EXITRC=%ERRORLEVEL%
IF NOT %EXITRC% == 0 GOTO :EXIT
SET EXITMSG=PROCESSING COMPLETE
:EXIT
ECHO STEP: %EXITMSG% RC: %EXITRC%
ECHO FINISHING MOVEFILES
PAUSE
EXIT %EXITRC%
Esto es lo que tengo para Windows 7:
@ECHO OFF
ECHO STARTING MOVEFILESWIN7
SET EXITRC=0
SET EXITMSG=EXITRC INITIALIZED
ECHO %EXITRC% -- %EXITMS
COPY "//networkDrive/install/Individual/program/MOVEFILES.exe" "C:/ProgramData/Microsoft/Windows/Start Menu/Programs/Startup"
ECHO COPIED MOVEFILESWIN7 TO YOUR PC - All Users / Public Startup folder
SET EXITRC=%ERRORLEVEL%
IF NOT %EXITRC% == 0 GOTO :EXIT
SET EXITMSG=PROCESSING COMPLETE
:EXIT
ECHO STEP: %EXITMSG% RC: %EXITRC%
ECHO FINISHING MOVEFILESWIN7
PAUSE
EXIT %EXITRC%
Me gustaría tener solo un archivo de proceso por lotes que cubra ambos escenarios para que no haya confusión para el usuario sobre qué archivo por lotes ejecutar.