0

私が作成した DOS スクリプトでは、次のエラーの原因を特定できません。

The system cannot find the file specified.
Error occurred while processing: .exe.

これがスクリプトです。どんな助けでも大歓迎です。DosTips フォーラムで助けを求めようとしましたが、答えがありません。:

@echo off
:: script to edit property files
CALL :PROPEDIT # Key4 Value446 test.properties    
GOTO :END    
:PROPEDIT [#] PropKey PropVal File
IF "%~1"=="#" (
  :: Passing a first argument of "#" will disable the line while editing
  SET "_PREFIX=#"
  SHIFT
)
IF NOT "%~4"=="" (
  ECHO Too many arguments.
  EXIT /B 1
)  
IF "%~3"=="" (
  ECHO PROPEDIT: Function requires 3 args: [#] PropKey PropVal File
  EXIT /B 1
) ELSE (
  SET "_PROPKEY=%~1"
  SET "_PROPVAL=%~2"
  SET "_FILE=%~3"
)
MOVE /Y "%_FILE%" "%_FILE%.bak">nul
FOR /F "USEBACKQ tokens=*" %%A IN (`TYPE "%_FILE%.bak" ^|FINDSTR /N /I "%_PROPKEY%="`) DO (
  SET LINE=%%A
)
FOR /F "tokens=1,2* delims=:" %%S IN ("%LINE%") DO SET LINE=%%S
SET /A COUNT=1
FOR /F "USEBACKQ delims=" %%A IN (`TYPE "%_FILE%.bak" ^|FIND /V /N ""`) DO (
  SET "LN=%%A"
  SETLOCAL ENABLEDELAYEDEXPANSION
  SET "LN=!LN:*]=!"
  IF "!COUNT!" NEQ "%LINE%" (
      ECHO(!LN!>>%_FILE%
  ) ELSE (
      ECHO %_PREFIX%%_PROPKEY%=%_PROPVAL%>>%_FILE%
      ECHO Updated '%_FILE%' with value '%_PREFIX%%_PROPKEY%=%_PROPVAL%'.
  )
  ENDLOCAL
  SET /A COUNT+=1
)
EXIT /B 0
:END
ECHO --- Finished Test ---
pause
4

2 に答える 2

3

FINDとTYPEの.EXEを削除します

TYPEは必要ありません。あなたはまさにこれを行うことができます:

FOR /F "tokens=*" %%A IN (`FIND /N /I "%_PROPKEY%=" "%_FILE%.bak"`) DO (

FINDが( TYPEを使用せずに)結果を損なう場合は、代わりにFINDSTRを使用することを検討し、「 DELIMS =]」の代わりに「DELIMS=: 」を使用してください。

以下が役立つと私が思うなら、「MORE + nnn 」コマンドを見てください(ファイル内の特定の場所から行を出力する「 + nnn 」に注意してください)。

コードの先頭に「 SETLOCALENABLEなど」を配置してみませんか?

あなたが何をしようとしているのかを説明すれば、私はより良い立場に立つことができるかもしれません。

ほんの少しの考え:)

于 2012-01-14T06:16:33.273 に答える
0

以下は、Paul Tomasi の助けを借りて動作するコードです。

@echo off
SETLOCAL DISABLEDELAYEDEXPANSION
CALL :PROPEDIT # Key4 Value446 test.properties
GOTO :END
:PROPEDIT [#] PropKey PropVal File
IF "%~1"=="#" (
  :: Passing a first argument of "#" will disable the line while editing
  SET "_PREFIX=#"
  SHIFT
)
IF NOT "%~4"=="" (
  ECHO Too many arguments.
  EXIT /B 1
)  
IF "%~3"=="" (
  ECHO PROPEDIT: Function requires 3 args: [#] PropKey PropVal File
  EXIT /B 1
) ELSE (
  SET "_PROPKEY=%~1"
  SET "_PROPVAL=%~2"
  SET "_FILE=%~3"
)
MOVE /Y "%_FILE%" "%_FILE%.bak">nul
FOR /F "USEBACKQ tokens=*" %%A IN (`TYPE "%_FILE%.bak" ^|FINDSTR /N /I "%_PROPKEY%="`) DO (
  SET LINE=%%A
)
FOR /F "tokens=1,2* delims=:" %%S IN ("%LINE%") DO SET LINE=%%S
SET /A COUNT=1
FOR /F "USEBACKQ delims=" %%A IN (`TYPE "%_FILE%.bak" ^|FIND /V /N ""`) DO (
  SET "LN=%%A"
  SETLOCAL ENABLEDELAYEDEXPANSION
  SET "LN=!LN:*]=!"
  IF "!COUNT!" NEQ "%LINE%" (
      ECHO(!LN!>>%_FILE%
  ) ELSE (
      ECHO %_PREFIX%%_PROPKEY%=%_PROPVAL%>>%_FILE%
      ECHO Updated '%_FILE%' with value '%_PREFIX%%_PROPKEY%=%_PROPVAL%'.
  )
  SETLOCAL DISABLEDELAYEDEXPANSION
  SET /A COUNT+=1
)
EXIT /B 0
:END
ECHO --- Finished Test ---
pause
于 2012-01-14T20:50:02.280 に答える