Windows 读然后写分隔文件-批处理cmd

Windows 读然后写分隔文件-批处理cmd,windows,batch-file,delimited-text,Windows,Batch File,Delimited Text,嗨,我有一个管道|分隔文件。 我需要把里面的数字倒过来 文件看起来像这样 Entity|Division|Channel|200|300|800 我需要读取文件并创建一个编号相反的新文件 Entity|Division|Channel|-200|-300|-800 试图让这项工作,但不完全确定如何修改我得到的文本。我需要有关:processToken过程的帮助。如何将令牌输出到新文件中,添加“-”并添加回分隔符 for /f "tokens=* delims= " %%f in (M:\GP

嗨,我有一个管道
|
分隔文件。 我需要把里面的数字倒过来

文件看起来像这样

Entity|Division|Channel|200|300|800
我需要读取文件并创建一个编号相反的新文件

Entity|Division|Channel|-200|-300|-800
试图让这项工作,但不完全确定如何修改我得到的文本。我需要有关
:processToken
过程的帮助。如何将令牌输出到新文件中,添加“-”并添加回分隔符

for /f "tokens=* delims= " %%f in (M:\GPAR\Dev\EQ\Upload_Files\eq_test.txt) do (
set line=%%f
call :processToken
)
goto :eof

:processToken
for /f "tokens=* delims=|" %%a in ("%line%") do (
)
if not "%line%" == "" goto :processToken
goto :eof
谢谢

如果您的文件只包含像您发布的那样的行,则应该可以使用

编辑输出第6个标记后的零件:

@echo off
set "ent_file=c:\entity.txt"
break>"%tmp%\rev.txt"
for /f "usebackq tokens=1,2,3,4,5,6,* delims=|" %%a in ("%ent_file%") do (

    echo %%a^|%%b^|%%c^|-%%d^|-%%e^|-%%f|%%g

)>>"%tmp%\rev.txt"

move /y "%tmp%\rev.txt" "%ent_file%" 
del /q /f "%tmp%\rev.txt"
@echo关闭
setlocal EnableDelayedExpansion
设置位数=0123456789
(对于/F“delims=“%%F in(eq_test.txt)do(
设置“输入=%%f”
设置“输出=”
调用:processToken
设置/P“=!输出:~1!”新建文件.txt
后藤:EOF
:processToken
对于/F“tokens=1*delims=|”%%a in(“%input%”)do(
设置“令牌=%%a”
设置“输入=%%b”
)
如果“!digits:%token:~0,1%=!”neq“%digits%”设置“token=-%token%”
设置“输出=%output%|%token%”
如果已定义,则输入转到processToken
退出/B

谢谢,这很有效。我认为我是聪明的,看看我是否可以将它应用到超过6列。26/Z之后会发生什么?我总共有55列。@gemmo您可以使用61个标记->-但您需要知道它们的顺序。以下是所有标记
?@A B C D E F G H I J K L M N O P Q R S T U V W X Y Z[\]^` A B C D E F G I J K L M N O P Q R S T U W X Y Z{
注意,必须用第二个插入符号转义插入符号字符:^^^@gemmo-检查此项,您最多只能获得31个标记。@gemmo,如果您想处理字符串直到第6个标记,您可以使用
*
并将其余标记分配给
%%g
@echo off
set "ent_file=c:\entity.txt"
break>"%tmp%\rev.txt"
for /f "usebackq tokens=1,2,3,4,5,6,* delims=|" %%a in ("%ent_file%") do (

    echo %%a^|%%b^|%%c^|-%%d^|-%%e^|-%%f|%%g

)>>"%tmp%\rev.txt"

move /y "%tmp%\rev.txt" "%ent_file%" 
del /q /f "%tmp%\rev.txt"
@echo off
setlocal EnableDelayedExpansion

set digits=0123456789

(for /F "delims=" %%f in (eq_test.txt) do (
   set "input=%%f"
   set "output="
   call :processToken
   set /P "=!output:~1!" < NUL
   echo/
)) > new_file.txt
goto :EOF

:processToken
   for /F "tokens=1* delims=|" %%a in ("%input%") do (
      set "token=%%a"
      set "input=%%b"
   )
   if "!digits:%token:~0,1%=!" neq "%digits%" set "token=-%token%"
   set "output=%output%|%token%"
   if defined input goto processToken
exit /B