通过批量重命名列中的值

时间:2019-08-26 18:15:37

标签: batch-file

我有一个制表符分隔的txt文件,我试图在每行的最后一列中找到值0,然后将该值从0重命名为K。这是我到目前为止提出的代码,但是我可以无法获取要更改的值。我在这里做什么错了?

ECHO ON
SETLOCAL ENABLEDELAYEDEXPANSION 
SET "sourcedir=E:\psexport"
SET "destdir=E:\psexport"
SET "filename1=%sourcedir%\nk3.txt"
SET "outfile=%destdir%\nk4.txt"
(
 FOR /f * IN ("%filename1%") DO (
 SET "line=*"
 SET "line=!line:0=K"
 ECHO !line!
)
)>"%outfile%"
GOTO :EOF

`

2 个答案:

答案 0 :(得分:0)

您正在使用bang,希望能看到百分比。另外,我不确定第二条陈述。

请参见下面的代码示例。在echo命令中,我正在调用line,将变量0替换为K。它包装在百分比中,因为整个表达式是我们要回显的变量。

ECHO ON
SETLOCAL ENABLEDELAYEDEXPANSION 
SET "sourcedir=E:\psexport"
SET "destdir=E:\psexport"
SET "filename1=%sourcedir%\nk3.txt"
SET "outfile=%destdir%\nk4.txt"
(
 FOR /f * IN ("%filename1%") DO (
 SET "line=*"
 ECHO %line:0=K%
)
)>"%outfile%"
GOTO :EOF

答案 1 :(得分:0)

@ECHO OFF 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET "sourcedir=E:\psexport"
SET "destdir=E:\psexport"

SET "filename1=%sourcedir%\nk3.txt"
SET "outfile=%destdir%\nk4.txt"
(
FOR /f "usebackq delims=" %%a IN ("%filename1%") DO (
 SET "line=%%a"
 IF "!line:~-2!"==" 0" (
  ECHO !line:~0,-2! K
 ) ELSE (
  ECHO %%a
 )
)
)>"%outfile%"
GOTO :EOF

for语法要求使用metavariable-我已经使用过%%a-这是字母顺序且区分大小写的。

使用修饰符usebackq是因为要读取的文件名带有引号。

delims=表示没有定界符,因此整个文件行都传递到%%a中。

要使用子字符串,我们需要将值传输到标准环境变量,然后测试所读取行的最后两个字符为0,以使10不会被修改。如果测试正确,请echo从开头(字符0)到末尾的-2 个字符并附加K,否则,请重新输入原始行。 / p>

您使用的set语法将{em>每一个 0替换为K