由于我不是脚本命令方面的专家,而且我对这个脚本感到困惑,所以我向社区寻求帮助。
至于我的问题,我尝试了以下内容(请参阅下面的代码),以便更改特定位置的文本文件中的字符。使用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%
)
答案 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
如果没有代表性数据,我们就会猜测。