使用批处理脚本在点后编辑文本

时间:2017-12-04 21:32:55

标签: windows batch-file text-files

我想删除最后3列中带有批处理文件(窗口)的点后的三位数字。请注意,点可以存在于其他列中。

这是我的数据样本:

4216118,'0806010709','ljubičasti ','Hita kirška ambnta',1,'Eriiti (vk, kk)','X','Uđaj za heološke prege','Celyn1800 ','Hni Sak','Hemlogja','2016-06-08 11:42:05.040','2016-06-08 11:41:42.122','2016-06-08 11:49:49.370'
4216081,'0806010387','ljubičasti ','Oća doven.amb. - VANJA',1,'Erii (vk, kk)',,'Urj za heoške prage','Adia 120 R','Reni','Hlogija','2016-06-08 08:52:13.962','2016-06-08 08:51:57.067','2016-06-08 11:08:26.504'
4216667,'1506010909','ljčasti ','tna ambuta kke za invne bolesti',1,'Erciti (vk, kk)',,'Uj za hemloške prge','Cell-Dyn 1800 R','Hi','Hemagija','2016-06-15 21:24:14.646','2016-06-15 21:24:03.523','2016-06-15 21:26:58.871'
4213710,'0905010991','ljubičasti ','Hna kira amnta',1,'Eociti (vk, kk)','X','Uđaj za hemloške prage','Cel1800 ','Hi Sak','Hemlogja','2016-05-09 17:52:32.231','2016-05-09 17:52:26.319','2016-05-09 18:31:33.643'

实施例: 之前:

'2016-06-08 11:49:49.370'

后:

'2016-06-08 11:49:49'

2 个答案:

答案 0 :(得分:2)

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
SET "filename1=%sourcedir%\q47642335.txt"
SET "outfile=%destdir%\outfile.txt"
(
FOR /f "delims=" %%a IN ('more %filename1%') DO (
 SET "line=%%a"
 ECHO !line:~0,-57!!line:~-53,-31!!line:~-27,-5!!line:~-1!
)
)>"%outfile%"

GOTO :EOF

您需要更改sourcedirdestdir的设置以适合您的具体情况。

我使用了一个名为q47642335.txt的文件,其中包含我的测试数据。

生成定义为%outfile%

的文件

可悲的是,cmd并没有很好地使用unicode文件,因此会对数据进行一些修改。本质上,读取每一行并选择要连接的行部分,使用-子串值从行的末尾进行选择,这是一致的结构。

答案 1 :(得分:1)

试试这个,没有任何保证。关于你的例子,期望你想删除最后三位数字和点,不像你的描述删除三位数字后点。

@echo off & setlocal ENABLEDELAYEDEXPANSION > out.txt
for /f "tokens=1-15 delims=," %%a in (data.txt) do (
            set "string="
            call :process "%%a" "%%b" "%%c" "%%d" "%%e" "%%f" "%%g" "%%h" "%%i" "%%j" "%%k" "%%l" "%%m" "%%n" "%%o"
            )
exit /B

:process
echo %~1| findstr /R /C:"[0-9]*-[0-9]*-[0-9]* [0-9]*:[0-9]*:[0-9]*\.[0-9][0-9][0-9]" >NUL
if not errorlevel 1 (
            set "str=%~1"
            set "str=!str:~0,-5!"
            if defined string (set "string=!string!,!str!'") else (set "string='!str!'")
            ) else (
            set "str=%~1"
            if defined string (set "string=!string!,!str!") else (set "string='!str!'")
            )
shift           
if not "%~1"=="" (goto :process) else (echo !string!>>out.txt)
GOTO:EOF