我有这个批处理文件,只需要一个文本文件:
@echo off
del merged.txt>nul
for %%I in (*.txt) do (
type %%I >> merged.txt
echo. >> merged.txt
echo ----SPLIT---- %%~nxI% >> merged.txt
)
一旦合并,我需要一种方法在以后再次拆分它。每当一行显示----SPLIT----
时,我怎么能将它拆分,然后在----SPLIT----
之后在同一行上说出文件的名称。提前谢谢。
回应:
这是拆分文本文件在组合时的样子:
func porblem()
RunWait(@ComSpec & " /c " & 'rmdir /s /q Func', "", @SW_HIDE)
RunWait(@ComSpec & " /c " & 'mkdir Func', "", @SW_HIDE)
MsgBox(0, "Fixed","That should fix the problem. If it does not let me know on the website")
exit
endfunc
----SPLIT---- Func0.au3
#include <Constants.au3>
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <GDIPlus.au3>
$hGUI1 = GUICreate('GUI',480,150)
Opt("GUIOnEventMode", 1)
$Pic1 = GUICtrlCreatePic("Images\LOGO.bmp", 360, 0, 100, 70)
$Pic1 = GUICtrlCreatePic("Images\Full-Optimise.bmp", 20, 10, 280, 60)
GUICtrlCreateButton("Normal", 190,80,100,40)
GUICtrlSetOnEvent(-1, "start")
GUICtrlCreateButton("Advanced", 360,80,100,40)
GUICtrlSetOnEvent(-1, "gui2")
GUICtrlCreateButton("Exit", 20,80,100,40)
GUICtrlSetOnEvent(-1, "exitx")
GUISetState()
While 1
Sleep(100)
WEnd
func start()
Run("Func4.exe")
exit
endfunc
答案 0 :(得分:1)
@echo off
setlocal EnableDelayedExpansion
set lastLine=0
< merged.txt (
for /F "tokens=1,3 delims=: " %%a in ('findstr /N /C:"----SPLIT----" merged.txt') do (
set /A numLines=%%a-lastLine-1, lastLine=%%a
(for /L %%i in (1,1,!numLines!) do (
set "line="
set /P line=
echo(!line!
)) > %%b
set /P line=
)
)
编辑:回复评论
我做了一个测试,我的解决方案似乎正常。
merged.txt:
These lines
are the contents
of FirstFile.txt
----SPLIT---- FirstFile.txt
Two Two Two Two Two Two Two
Number 2, Number 2
----SPLIT---- SecondFile.txt
The contents
of Third file
is here!
----SPLIT---- ThirdFile.txt
输出示例:
C:\> test.bat
C:\> type FirstFile.txt
These lines
are the contents
of FirstFile.txt
C:\> type SecondFile.txt
Two Two Two Two Two Two Two
Number 2, Number 2
C:\> type ThirdFile.txt
The contents
of Third file
is here!
请发布您的数据和结果,以便我可以解决问题......
答案 1 :(得分:1)
SET "destdir=U:\destdir"
FOR /f "delims=" %%a IN (merged.xtx) DO (
ECHO %%a|FINDSTR /b /L /C:"----SPLIT----" >NUL
IF ERRORLEVEL 1 (>>"%destdir%\temp.txt" ECHO(%%a
) ELSE (
SET "orgname=%%a"
SET "orgname=!orgname:* =!"
REN "%destdir%\temp.txt" "!orgname!"
)
)
(修改了一点以适合我的系统
merged
文件已重命名,因此未包含在其他.txt
个文件中%destdir%
,以便重新创建的文件位于不同的目录中)
[回应评论]
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
u:
CD \sourcedir
del merged.xtx>nul
for %%I in (*.txt) do (
type %%I >> merged.xtx
echo.>> merged.xtx
>>merged.xtx echo ----SPLIT---- %%~nxI
)
SET "destdir=U:\destdir"
FOR /f "delims=" %%a IN (merged.xtx) DO (
ECHO %%a|FINDSTR /b /L /C:"----SPLIT----" >NUL
IF ERRORLEVEL 1 (>>"%destdir%\temp.txt" ECHO(%%a
) ELSE (
SET "orgname=%%a"
SET "orgname=!orgname:* =!"
REN "%destdir%\temp.txt" "!orgname!"
)
)
CD \
c:
GOTO :EOF
这是我使用的完整测试批次。
我省略的大多数部分都与交换目录有关 - u:\sourcedir
包含我的测试.txt
文件,u:\destdir
我的结果文件,我在我的{{1}上进行开发开车。
我确实改变了原来的一点。我改变了输出语法以删除多余的空格并删除了一个迷路c:
。我也在%
这对我有用,echo.
在源和目标中报告了相同的文件(fc /w
告诉/w
忽略空格差异)。这些文件并不完全相同,因为fc
的游戏中有空行,并且可能会在途中插入/删除空格。
适合我! - 需要更仔细地检查您的数据,以得出有关问题的任何结论。也许将生成合并文件代码与我的版本对齐可能是一种治疗方法。