如何使用 txt 编辑批处理脚本删除底片

how to remove a Negative using a txt editing batch script

我需要一点帮助
我最近就同一个脚本问了一个不同的问题
现在我的脚本为我工作并发现了一个新问题
这是我的脚本

@ECHO Off
setlocal ENABLEDELAYEDEXPANSION
cd /d "%~dp0"
:: Significant part of string

set "params1="okhg": "
set "params2="tfed": "
set "params3="pkna": "
set "params4=txt": ""

@For %%G In ("%~dp0Preparing") Do Set "sourcedir=%%~fG"
@For %%G In ("%~dp0Ready") Do Set "destdir=%%~fG"

FOR /f "delims=" %%q IN ('dir /b /s /a-d "%sourcedir%\(*)*.txt"') DO (
 rem calculate new destination directory
 SET "newdest=%%~dpq"
 SET "newdest=!newdest:%sourcedir%=%destdir%!"
 SET "newdest=!newdest:~0,-1!"
 MD "!newdest!" 2>nul

(
 FOR /f "tokens=1 delims=()" %%j IN ("%%~nxq") DO (
  rem %%j now has sequence number
  for /F "tokens=1* delims=:" %%a in ('findstr /N "^" "%%q"') do (
   set "line=%%b"
   for %%x in (%params1%) do if defined line IF "%%b" neq "!line:%%x=!" CALL :subs1 %%j
   for %%x in (%params2%) do if defined line IF "%%b" neq "!line:%%x=!" CALL :subs2 %%j
   for %%x in (%params3%) do if defined line IF "%%b" neq "!line:%%x=!" CALL :subs3 %%j
   for %%x in (%params4%) do if defined line IF "%%b" neq "!line:%%x=!" CALL :subs4 %%j
   echo(!line!
  )
 )
)>"!newdest!\%%~nxq" 

)
GOTO :eof

:: substitute
:subs1
SET "original=%line%"
FOR /L %%s IN (0,1,9) DO set "line=!line:%params1%%%s=%params1%!"
IF "%original%" neq "%line%" goto subs1
set "line=!line:%params1%=%params1%%1!"
GOTO :eof

:subs2
SET "original=%line%"
FOR /L %%s IN (0,1,9) DO set "line=!line:%params2%%%s=%params2%!"
IF "%original%" neq "%line%" goto subs2
set "line=!line:%params2%=%params2%%1!"
GOTO :eof

:subs3
SET "original=%line%"
FOR /L %%s IN (0,1,9) DO set "line=!line:%params3%%%s=%params3%!"
IF "%original%" neq "%line%" goto subs3
set "line=!line:%params3%=%params3%%1!"
GOTO :eof

:subs4
SET "original=%line%"
FOR /L %%s IN (0,1,9) DO set "line=!line:%params4%%%s=%params4%!"
IF "%original%" neq "%line%" goto subs3
set "line=!line:%params4%=%params4%CITY%1!"
GOTO :eof

这是它的工作原理

ORIGNAL FOLDER
+ ----- FOLDER 1
--------+ --(100) Filename.txt
-------------+ -- "okhg": 452587"
-------------+ -- "tfed": 6541"
-------------+ -- "pkna": -58452"
-------------+ -- "txt": ""

RESULTS FOLDER
+ ----- FOLDER 1
--------+ --(100) Filename.txt
-------------+ -- "okhg": 100"
-------------+ -- "tfed": 100"
-------------+ -- "pkna": 100-58452"
-------------+ -- "txt": "CITY100"

我遇到的问题是这条线有负数

"pkna": -58452"

我已经测试了不同的方法来让脚本删除负数

如果我这样离开,我会得到这个结果

set "params3="pkna": "
  "pkna": 100-58452"

如果我这样做,我会得到这个结果

set "params3="pkna": -"
      "pkna": -100"

我要找的是这个

"pkna": 100"

谢谢

编辑:

问题已更新为答案。

该代码将使用其前缀名称或“更直接”的编码将多个 row/lines“编码”到一个文本文件中。

如果您确实知道清理代码的方法,请随时 post 回答。我想留下一个脚本,如果需要我可以继续添加更多代码

感谢您为让我们的脚本变得更好而付出的辛勤工作

@ECHO Off
setlocal ENABLEDELAYEDEXPANSION
cd /d "%~dp0"
:: Significant part of string

set "params1="okhg": "
set "params2="tfed": "
set "params3="pkna": "
set "params4=txt": ""

@For %%G In ("%~dp0Preparing") Do Set "sourcedir=%%~fG"
@For %%G In ("%~dp0Ready") Do Set "destdir=%%~fG"

FOR /f "delims=" %%q IN ('dir /b /s /a-d "%sourcedir%\(*)*.txt"') DO (
 rem calculate new destination directory
 SET "newdest=%%~dpq"
 SET "newdest=!newdest:%sourcedir%=%destdir%!"
 SET "newdest=!newdest:~0,-1!"
 MD "!newdest!" 2>nul

(
 rem this will take the data in the filename enclosed in (!)
 FOR /f "tokens=1 delims=()" %%j IN ("%%~nxq") DO (
 rem this will replace any random codes found after : with 10
 FOR /f "tokens=1 delims=()" %%k IN ("10") DO (
 rem this will add any wording after this : and will take data enclosed in (!)
 FOR /f "tokens=1 delims=()" %%l IN ("%%~nxq") DO (
  rem %%j %%k %%l now has sequence number or pattern
  for /F "tokens=1* delims=:" %%a in ('findstr /N "^" "%%q"') do (
   set "line=%%b"
   rem in order to make each code work I gave them there own ::Substitute
   for %%x in (%params1%) do if defined line IF "%%b" neq "!line:%%x=!" CALL :subs1 %%j
   for %%x in (%params2%) do if defined line IF "%%b" neq "!line:%%x=!" CALL :subs2 %%j
   for %%x in (%params3%) do if defined line IF "%%b" neq "!line:%%x=!" CALL :subs3 %%k
   for %%x in (%params4%) do if defined line IF "%%b" neq "!line:%%x=!" CALL :subs4 %%l
   echo(!line!
    )
   )
  )
 )
)>"!newdest!\%%~nxq" 

)
GOTO :eof

:: substitute
:subs1
SET "line=%line:-=%"
SET "original=%line%"
FOR /L %%s IN (0,1,9) DO set "line=!line:%params1%%%s=%params1%!"
IF "%original%" neq "%line%" goto subs1
set "line=!line:%params1%=%params1%%1!"
GOTO :eof

:subs2
SET "line=%line:-=%"
SET "original=%line%"
FOR /L %%s IN (0,1,9) DO set "line=!line:%params2%%%s=%params2%!"
IF "%original%" neq "%line%" goto subs2
set "line=!line:%params2%=%params2%%1!"
GOTO :eof

:subs3
SET "line=%line:-=%"
SET "original=%line%"
FOR /L %%s IN (0,1,9) DO set "line=!line:%params3%%%s=%params3%!"
IF "%original%" neq "%line%" goto subs3
set "line=!line:%params3%=%params3%%1!"
GOTO :eof

:subs4
SET "line=%line:-=%"
SET "original=%line%"
FOR /L %%s IN (0,1,9) DO set "line=!line:%params4%%%s=%params4%!"
IF "%original%" neq "%line%" goto subs3
set "line=!line:%params4%=%params4%City%1!"
GOTO :eof