回答
以下是一種方法。假設wordA和wordB在同一行(都必須存在)。 該子例程:FindString刪除不需要的前面的文本,然後用我們不期望在文本中我們將用作分隔符(在本例中爲``)的字符替換「wordB」。如有必要,請使用其他角色
@ECHO OFF
SET InFile=Test.txt
FOR /F "tokens=*" %%A IN ('FINDSTR "wordA" "%InFile%" ^| FINDSTR "wordB"') DO CALL :FindString "%%A"
pause
GOTO :eof
:FindString
SET String=%~1
SET String=%String:*wordA =%
SET String=%String: wordB=`%
FOR /F "tokens=1 delims=`" %%A IN ('ECHO.%String%') DO ECHO.%%A]
GOTO :eof
你好,非常感謝你的回答。不幸的是,我錯過了指定WordA和WordB不在同一行。 – user2102732 2013-02-24 08:16:40
當「wordA」和「wordB」不在同一行時,可以這樣做。它將輸出發送到Output.txt。這將是輸入文件中第一個「wordA」和第一個「wordB」之間的文本(區分大小寫)。如果有多個(或不匹配)的wordA/B集合,您沒有指定要執行的操作。
:RemoveWordB用我們不希望在文本中將會用作分隔符(在本例中爲``)的字符替換「wordB」。如有必要,請使用其他角色
@ECHO OFF
SET InFile=Test.txt
SET OutFile=Output.txt
IF EXIST "%OutFile%" DEL "%OutFile%"
SET TempFile=Temp.txt
IF EXIST "%TempFile%" DEL "%TempFile%"
FOR /F "tokens=*" %%A IN ('FINDSTR /N "wordA" "%InFile%"') DO (
CALL :RemovePrecedingWordA "%%A"
FOR /F "tokens=1 delims=:" %%B IN ('ECHO.%%A') DO (
MORE +%%B "%InFile%"> "%TempFile%"
FINDSTR /V "wordB" "%TempFile%">> "%OutFile%"
FOR /F "tokens=*" %%C IN ('FINDSTR "wordB" "%InFile%"') DO (
CALL :RemoveWordB "%%C"
IF EXIST "%TempFile%" DEL "%TempFile%"
GOTO :eof
)
)
)
GOTO :eof
:RemovePrecedingWordA
SET String=%~1
SET String=%String:*wordA =%
ECHO.%String%> "%OutFile%"
GOTO :eof
:RemoveWordB
REM Replace "wordB" with a character that we don't expect in text that we will then use as a delimiter (` in this case)
SET LastLine=%~1
SET LastLine=%LastLine:wordB=`%
FOR /F "tokens=1 delims=`" %%A IN ('ECHO.%LastLine%') DO ECHO.%%A>> "%OutFile%"
GOTO :eof
我可能會響起了詢問澄清,但是...... 您提供的2個文件是您正在使用的文件? 兩者都不是文本文件。 「wordA」和「wordB」究竟是什麼?
試圖插入我的評論,但它總是被禁止。對不起,不明白爲什麼 – user2102732 2013-02-26 17:36:30
這使用從名爲repl.bat
一個幫手批處理文件 - http://www.dostips.com/forum/viewtopic.php?f=3&t=3855
在同一文件夾中的批處理文件將repl.bat
。
@echo off
type infile |repl ".*wordA(.*)wordB.*" "$1" >outfile
@btidba看到你的問題的這個答案。 – foxidrive 2013-10-18 19:00:16
- 1. 使用批處理文件提取文件名的一部分
- 2. 提取使用批處理
- 3. 分配線在批處理DOS
- 4. 使用DOS批處理,從第3列
- 5. MS-DOS批處理編碼
- 6. DOS批處理命令
- 7. DOS批處理編程PSEXEC
- 8. 使用特定格式的dos批處理腳本提取日期
- 9. 用戶輸入 - DOS批處理文件
- 10. 批處理文件中提取字符串部分
- 11. 從彈出批處理數據庫表的部分提取
- 12. 批處理 - 使用分隔符從文件中提取文本
- 13. 獲取使用批處理
- 14. 批處理DOS - 重命名文件夾
- 15. DOS批處理:從相對路徑
- 16. 批處理文件的MS-DOS 6.22
- 17. 翻譯DOS批處理文件的PowerShell
- 18. DOS批處理:需要增加新線
- 19. MS-DOS的FTP命令在批處理文件:提高錯誤
- 20. DOS批處理:如何刪除文件夾名稱的最後部分
- 21. 如何提取/複製從文本到DOS批處理文件串
- 22. 使用DOS啓動命令無法寫入批處理文件處理結果
- 23. DOS批處理文件每10分鐘移動2000個文件
- 24. DOS批處理:使用雙引號與IF
- 25. 如何使用Python在後臺運行DOS批處理文件?
- 26. 使用DOS查找並替換批處理文件
- 27. DOS批處理命令文件 - 迭代處理
- 28. 如何在DOS批處理文件中獲取mm-dd-yyyy?
- 29. 獲取oracle sqlplus選擇計數值到dos批處理文件
- 30. 使用DOS批處理腳本從ntp服務器獲取日期?
是的,這是可能的。你有什麼嘗試?文件的內容是什麼? – 2013-02-23 17:01:40
如果這是關於解析一個XML文件,看看這些問題:[從批處理腳本解析XML時意外的字符](http://stackoverflow.com/questions/12956694/),[如何批量解析xml文件(CMD)](http://stackoverflow.com/questions/11014319/),[如何提取使用Windows批處理特定XML標記屬性的所有實例](http://stackoverflow.com/questions/11141337/) – 2013-02-25 22:19:57