使用cmd(脚本)更改txt文件的行和字符x

时间:2016-01-05 15:10:10

标签: windows cmd text-files

由于我不是脚本命令方面的专家,而且我对这个脚本感到困惑,所以我向社区寻求帮助。

至于我的问题,我尝试了以下内容(请参阅下面的代码),以便更改特定位置的文本文件中的字符。使用For /F我希望将整个文件读出到备份副本,然后使用IF将所需位置更改为新值。但是我注意到,当我将令牌参数放到tokens=6时,它不会将整个文件复制到新位置。所以我将其更改为tokens=*。然而,这样就改变了第74行的整行。 :s和这一点我也发现了ENTERS和特定字符作为"!"不会复制到备份文件。

现在我希望你可以帮我改变位置线74,令牌6上的这个字符,而不会进一步导致特定文本文件的任何更改。

感谢任何建议。

@echo off
CLS
setlocal enabledelayedexpansion
set ORIGINALFILE=test.file.txt
set MODIFIEDFILE=temp1.txt
set MODIFIEDFILE2=temp_backup.txt
set SEARCHVALUE=0
set REPLACEVALUE=1
set OUTPUTLINE=
set linenumber=0
::for demo purpose make cop of original file as original will be overwritten
copy %ORIGINALFILE% %MODIFIEDFILE2%
del temp1.txt
echo "all set"
timeout /t 2 /nobreak >nul

::everything is set now change the 6th item on the line 74 to a "1"

FOR /f "tokens=* delims=," %%G in ('"type %ORIGINALFILE%"') do (
set /a linenumber=!linenumber!+1
SET string=%%G
if !linenumber!  EQU 61 (

    SET modified=!string:%SEARCHVALUE%=%REPLACEVALUE%!
    echo !linenumber!
) else (
    echo !linenumber!
    SET modified=!string!       
)
echo !modified! >> %MODIFIEDFILE%   
)

1 个答案:

答案 0 :(得分:1)

@ECHO OFF
SETLOCAL
set ORIGINALFILE=q34614930.txt
set MODIFIEDFILE=u:\temp1.txt
set MODIFIEDFILE2=u:\temp_backup.txt
set SEARCHVALUE=0
set REPLACEVALUE=1
::for demo purpose make cop of original file as original will be overwritten
copy %ORIGINALFILE% %MODIFIEDFILE2% >NUL 2>nul
REM echo "all set"
REM timeout /t 2 /nobreak >nul

::everything is set now change the 6th item on the line 5 to a "1"
(
FOR /f "tokens=1*delims=:" %%a in ('findstr /n /r ".*" "%ORIGINALFILE%"') do (
 IF "%%a"=="5" (
  FOR /f "tokens=1-6*delims=," %%A IN ("%%b") DO echo(%%A,%%B,%%C,%%D,%%E,%replacevalue%,%%G
 ) ELSE ECHO(%%b
)
)>"%MODIFIEDFILE%"
GOTO :EOF

我使用了一个名为q34614930.txt的文件,其中包含一些测试数据供我测试。我还改变了文件名以适应mys系统。

在没有代表性数据的情况下,我使用以下内容并替换第5行中的第6列。

  

第1行,col2,col3,col4,col5,col6,col7,col8
  第2行,col2,col3,col4,col5,col6,col7,col8
  
  第4行,col2,col3,col4,col5,col6,col7,col8
  第5行,col2,col3,col4,col5,col6,col7,col8
  第6行,col2,col3,col4,col5,col6,col7,col8

结果

  

第1行,col2,col3,col4,col5,col6,col7,col8
  第2行,col2,col3,col4,col5,col6,col7,col8
  
  第4行,col2,col3,col4,col5,col6,col7,col8
  第5行,col2,col3,col4,col5,1,col7,col8
  第6行,col2,col3,col4,col5,col6,col7,col8

如果没有代表性数据,我们就会猜测。