'how to remove a Negative using a txt editing batch script
I need a little help with this
I recently asked a different question on this same script
Now I have my scripted working for me and found a new issue
Here is my 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
This is how it works
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"
The issue I am coming across with is that this line has a negative
"pkna": -58452"
I have tested different ways to make the scripts remove the negative
if I leave it like this, I get this result
set "params3="pkna": "
"pkna": 100-58452"
if I do this, I get this result
set "params3="pkna": -"
"pkna": -100"
what I am looking for is this
"pkna": 100"
Thank you
Solution 1:[1]
Edit:
The question has been updated with an answer.
The code will "code" multiple row/lines in to a text file using its prefix name, or with a "more direct" coding.
If you do know a way to clean up the code feel free to post an answer to do so., I would like to leave a script that I can continue to add more codes if needed
Thank you for all the hard work you'll provide us with to make our scripts better
@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
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 |