简体   繁体   中英

The process cannot access the file because it is being used by another process.(Batch file)

Device1.bat

@echo off
    :: script for updating property files
    SETLOCAL EnableExtensions
    SETLOCAL EnableDelayedExpansion
    if "%3"=="" (
      ECHO Script will optionally accept 3 args: PropKey PropVal File
      SET PROPKEY=Deviceid
      SET PROPVAL=dfs2341f
      SET FILE=config.properties
    ) ELSE (
      SET PROPKEY=%1
      SET PROPVAL=%2
      SET FILE=%3
    )
    FINDSTR /B %PROPKEY% %FILE% >nul
    IF %ERRORLEVEL% EQU 1 GOTO nowork
    MOVE /Y "%FILE%" "%FILE%.bak"
    FOR /F "USEBACKQ tokens=*" %%A IN (`TYPE "%FILE%.bak" ^|FIND /N /I "%PROPKEY%"`) DO (
      SET LINE=%%A
    )
    FOR /F "tokens=1,2* delims=]" %%S in ("%LINE%") DO SET LINE=%%S
    SET /A LINE=%LINE:~1,6%
    SET /A COUNT=1
    FOR /F "USEBACKQ tokens=*" %%A IN (`FIND /V "" ^<"%FILE%.bak"`) DO (
      IF "!COUNT!" NEQ "%LINE%" (
          ECHO %%A>>"%FILE%"
      ) ELSE (
          ECHO %PROPKEY%=%PROPVAL%>>"%FILE%"
          ECHO Updated %FILE% with value %PROPKEY%=%PROPVAL%
      )
      SET /A COUNT+=1
    )
    GOTO end
    :nowork
    echo Didn't find matching string %PROPKEY% in %FILE%. No work to do.
    pause
    :end

Device2.bat

@echo off
        :: script for updating property files
        SETLOCAL EnableExtensions
        SETLOCAL EnableDelayedExpansion
        if "%3"=="" (
          ECHO Script will optionally accept 3 args: PropKey PropVal File
          SET PROPKEY=Deviceid
          SET PROPVAL=dfs2341f
          SET FILE=config.properties
        ) ELSE (
          SET PROPKEY=%1
          SET PROPVAL=%2
          SET FILE=%3
        )
        FINDSTR /B %PROPKEY% %FILE% >nul
        IF %ERRORLEVEL% EQU 1 GOTO nowork
        MOVE /Y "%FILE%" "%FILE%.bak"
        FOR /F "USEBACKQ tokens=*" %%A IN (`TYPE "%FILE%.bak" ^|FIND /N /I "%PROPKEY%"`) DO (
          SET LINE=%%A
        )
        FOR /F "tokens=1,2* delims=]" %%S in ("%LINE%") DO SET LINE=%%S
        SET /A LINE=%LINE:~1,6%
        SET /A COUNT=1
        FOR /F "USEBACKQ tokens=*" %%A IN (`FIND /V "" ^<"%FILE%.bak"`) DO (
          IF "!COUNT!" NEQ "%LINE%" (
              ECHO %%A>>"%FILE%"
          ) ELSE (
              ECHO %PROPKEY%=%PROPVAL%>>"%FILE%"
              ECHO Updated %FILE% with value %PROPKEY%=%PROPVAL%
          )
          SET /A COUNT+=1
        )
        GOTO end
        :nowork
        echo Didn't find matching string %PROPKEY% in %FILE%. No work to do.
        pause
        :end

I am running device1.bat and device2.bat at a time. Device1.bat is running properly.But device2.bat throwing The process cannot access the file because it is being used by another process.please help me to solve this problem.

You could make a temporary copy of the config.properties for the device2 to use and delete it later. DEVICE 1:

@echo off
    :: script for updating property files
    SETLOCAL EnableExtensions
    SETLOCAL EnableDelayedExpansion
    if "%3"=="" (
      ECHO Script will optionally accept 3 args: PropKey PropVal File
      SET PROPKEY=Deviceid
      SET PROPVAL=dfs2341f
      SET FILE=config.properties
  ::make a temporary copy of config.properties
      copy config.properties config2.properties
    ) ELSE (
      SET PROPKEY=%1
      SET PROPVAL=%2
      SET FILE=%3
    )
    FINDSTR /B %PROPKEY% %FILE% >nul
    IF %ERRORLEVEL% EQU 1 GOTO nowork
    MOVE /Y "%FILE%" "%FILE%.bak"
    FOR /F "USEBACKQ tokens=*" %%A IN (`TYPE "%FILE%.bak" ^|FIND /N /I "%PROPKEY%"`) DO (
      SET LINE=%%A
    )
    FOR /F "tokens=1,2* delims=]" %%S in ("%LINE%") DO SET LINE=%%S
    SET /A LINE=%LINE:~1,6%
    SET /A COUNT=1
    FOR /F "USEBACKQ tokens=*" %%A IN (`FIND /V "" ^<"%FILE%.bak"`) DO (
      IF "!COUNT!" NEQ "%LINE%" (
          ECHO %%A>>"%FILE%"
      ) ELSE (
          ECHO %PROPKEY%=%PROPVAL%>>"%FILE%"
          ECHO Updated %FILE% with value %PROPKEY%=%PROPVAL%
      )
      SET /A COUNT+=1
    )
    GOTO end
    :nowork
    echo Didn't find matching string %PROPKEY% in %FILE%. No work to do.
    pause
    :end

DEVICE2.bat:

@echo off
        :: script for updating property files
        SETLOCAL EnableExtensions
        SETLOCAL EnableDelayedExpansion
        if "%3"=="" (
          ECHO Script will optionally accept 3 args: PropKey PropVal File
          SET PROPKEY=Deviceid
          SET PROPVAL=dfs2341f
::changed config.properties to config2.properties
          SET FILE=config2.properties
        ) ELSE (
          SET PROPKEY=%1
          SET PROPVAL=%2
          SET FILE=%3
        )
        FINDSTR /B %PROPKEY% %FILE% >nul
        IF %ERRORLEVEL% EQU 1 GOTO nowork
        MOVE /Y "%FILE%" "%FILE%.bak"
        FOR /F "USEBACKQ tokens=*" %%A IN (`TYPE "%FILE%.bak" ^|FIND /N /I "%PROPKEY%"`) DO (
          SET LINE=%%A
        )
        FOR /F "tokens=1,2* delims=]" %%S in ("%LINE%") DO SET LINE=%%S
        SET /A LINE=%LINE:~1,6%
        SET /A COUNT=1
        FOR /F "USEBACKQ tokens=*" %%A IN (`FIND /V "" ^<"%FILE%.bak"`) DO (
          IF "!COUNT!" NEQ "%LINE%" (
              ECHO %%A>>"%FILE%"
          ) ELSE (
              ECHO %PROPKEY%=%PROPVAL%>>"%FILE%"
              ECHO Updated %FILE% with value %PROPKEY%=%PROPVAL%
          )
          SET /A COUNT+=1
        )
        GOTO end
        :nowork
        echo Didn't find matching string %PROPKEY% in %FILE%. No work to do.
        pause
::delete the temporary config2.properties
del /f /q config2.properties
        :end

hope that helps!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM