Discussion forum for all Windows batch related topics.
Moderator: DosItHelp
-
GreyFalcon70
- Posts: 2
- Joined: 23 Jan 2019 18:39
#1
Post
by GreyFalcon70 » 23 Jan 2019 20:08
This is a script I found that works Great cept one thing. Can someone help me change the Underscore to an open space or whitespace i think it is called????
Code: Select all
@echo off
setlocal EnableDelayedExpansion
:: remove variables starting $
For %%b IN ($) DO FOR /F "delims==" %%a In ('set %%b 2^>Nul') DO SET "%%a="
FOR %%a IN (0 1 2 3 4 5 6 7 8 9 a b c d e f) DO (
FOR %%b IN (0 1 2 3 4 5 6 7 8 9 a b c d e f) DO (
SET "$%%a%%b=%%%%a%%b"
)
)
for /f "delims=" %%I in ('dir /b /a-d^| find "%%"') do (
SET "var1=%%I"
FOR /f "tokens=2delims==" %%x IN ('set $') DO SET "var1=!var1:%%x=_"!"
IF "%%I" neq "!var1!" REN "%%I" "!var1!"
)
GOTO :EOF
-
ShadowThief
- Expert
- Posts: 1166
- Joined: 06 Sep 2013 21:28
- Location: Virginia, United States
#2
Post
by ShadowThief » 23 Jan 2019 21:09
Code: Select all
FOR /f "tokens=2delims==" %%x IN ('set $') DO SET "var1=!var1:%%x= "!"
Note that I haven't actually tested this, I just changed what is literally the only underscore in the entire code to a regular space.
-
Ed Dyreen
- Expert
- Posts: 1569
- Joined: 16 May 2011 08:21
- Location: Flanders(Belgium)
-
Contact:
#4
Post
by Ed Dyreen » 24 Jan 2019 06:01
$00=%00
$01=%01
....
There must exist some files in local directory that have char '%' in their filename.
Only then for /f "delims=" %%I in ('dir /b /a-d^| find "%%"') do (
will enumerate.
SET "var1=%%I"
var1=%00filename.extension. I added %00 to get a match later in your code.
FOR /f "tokens=2delims==" %%x IN ('set $') DO SET "var1=!var1:%%x=_"!"
so it does
set var1=!var1:%00=_"!
set var1=!var1:%01=_"!
etcetera...
that results in var1=_"filename.extension
IF "%%I" neq "!var1!" REN "%%I" "!var1!"
)
GOTO :EOF
It seems that there must exist some file named %[0-9,a-f][0-9,a-f][.*] for this script to work.
it try to replace %[0-9,a-f][0-9,a-f][.*] for all files with _"[.*]
the assignment will work but now REN fails because the name is not a valid filename, filenames cannot contain char '"'
I believe it was supposed to be SET "var1=!var1:%%x=_!" or if you want space SET "var1=!var1:%%x= !"
Add the command @echo on at the top of your batch to see what cmd is actually doing and use the Set command whenever in doubt, just as this script does. The naked Set command will list all "normal" variables and their definitions.