2

スクリプトに問題があります:

@echo on
setlocal EnableDelayedExpansion
pushd C:\Users\Oskars.Abuhovs\Desktop\testJstoReplace
for /f "delims=" %%a in ('dir /b /a-d-h-s') do (
  set newFile=C:\Users\Oskars.Abuhovs\Desktop\tempjs\%%a
  if exist !newfile! del /f /q !newfile!
  for /f "delims=" %%L in (%%a) do (
    set newLine=%%L
    echo !^newLine:dojo/i18n=ggggggggg^^!dddd! >> !newFile!
  )
)
popd
pause

問題は連続しています:

echo !^newLine:dojo/i18n=ggggggggg^^!dddd! >> !newFile!

どこのキャラクター!はエスケープされていませんsetlocal EnableDelayedExpansion。を使用して文字をエスケープする必要があります^^が、それは起こっていません。どうすればこのキャラクターを逃れることができますか?

編集:

ファイル内の文字列の一部を置き換えたい。この特定の文字列dojo/i18nは、! を含む別の文字列に置き換える必要があります。たとえばdojo/i18n!mycomputer

スクリプト全体が一緒にフォルダーからファイルを読み取り、すべてのファイルを行ごとに検索して、次の文字列を検索しdojo/i18nますdojo/i18n!mycomputer。エスケープでやってみました!の場合に動作するはずですsetlocal EnableDelayedExpansionが、この組み合わせ: ^^! この行では機能しませんが、単純に試してみるecho ^^!と機能しました。

だから私は逃げる方法を尋ねています!その行の文字?

前もって感謝します!

4

4 に答える 4

0

.vbsご回答ありがとうございますが、最終的に問題を解決するために切り替えることにしました。

後で誰かがそれを必要とする場合、このコードを使用しました:

Const ForReading = 1    
Const ForWriting = 2

strFilePath = Wscript.Arguments(0)
strOldText = Wscript.Arguments(1)
strNewText = Wscript.Arguments(2)

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strFilePath)
Wscript.Echo objFolder.Path
Set colFiles = objFolder.Files
For Each testFile in colFiles
    FileToReplace = strFilePath + testFile.Name
    Wscript.Echo FileToReplace
    Set objFile = objFSO.OpenTextFile(FileToReplace, ForReading)
    strText = objFile.ReadAll
    objFile.Close

If InStr(strText, strOldText) Then
    strText = Replace(strText, strOldText, strNewText)
    Set objFile = objFSO.OpenTextFile(FileToReplace, ForWriting)
    objFile.Write strText  'WriteLine adds extra CR/LF
    objFile.Close
End If
    strText = ""
Next
于 2013-07-18T11:38:32.147 に答える
0

コードを書き直して、遅延展開の必要性を回避できます。

@echo on
pushd C:\Users\Oskars.Abuhovs\Desktop\testJstoReplace
set newFile=C:\Users\Oskars.Abuhovs\Desktop\tempjs
for /f "delims=" %%a in ('dir /b /a-d-h-s') do (
  if exist "%newfile%\%%a" del /f /q "%newfile%\%%a"
  for /f "delims=" %%L in ('type "%%a" ') do (
    >>"%newfile%\%%a" echo %%L:dojo/i18n=ggggggggg!dddd
  )
)
popd
pause
于 2013-07-15T23:35:02.547 に答える