Page 1 of 1
What is "=::" and does its value ever changes?
Posted: 08 Aug 2014 16:01
by npocmaka_
besides it's a environment variable visible when set " is executed.
I have a slight memory that I saw a post here where the variable was connected to the disabled/enabled extensions (google search is not good at searching "=::") , but the disabled extensions only allow you to print its value as there is no performed a substitution.
If I add/change/delete the variable in the registry it's value is changed but I can't see any other effect.
Re: What is "=::" and does its value ever changes?
Posted: 08 Aug 2014 22:21
by einstein1969
Re: What is "=::" and does its value ever changes?
Posted: 09 Aug 2014 00:03
by npocmaka_
Thanks einstein1969.
However I've found a way to change its value without tickling the registries.
Just used a discover of carlos described here:
http://ss64.org/viewtopic.php?id=1599Code: Select all
>start /b cmd /e:off
>subst :: %temp%
>pushd ::
>md somedir
>cd somedir
>cd
::\somedir
>echo %=::%
::\somedir
Still I'm not sure if this variable points to some kind of special drive (e.g. the boot partition or current dir?) or is something else...
Re: What is "=::" and does its value ever changes?
Posted: 09 Aug 2014 14:29
by penpen
Somehow i missed these posts (
http://www.dostips.com/forum/viewtopic.php?p=8231#p8231), else i would have posted this earlier.
I assume, that there is no variable %=::% (at least not in win xp), it's just an illusion (there):
Code: Select all
@echo off
set "A=B"
echo %=C:%A%A%
echo %=:%A%A%
echo %=::%A%A%
echo %=:: %=::
echo %=::%=::
echo %=:
echo(
set "" | findstr "^="
Result:
Code: Select all
Z:\>test.bat
C:\TempAB
AB
:BA
: :
::
ECHO ist ausgeschaltet (OFF).
=C:=C:\Temp
=ExitCode=00000000
=Z:=Z:\
Sidenote: I cannot explain this behaviour, but as it has no use (or i haven't found one) i think this is a bug.
penpen
Edit: Corrected some wrong information.
Re: What is "=::" and does its value ever changes?
Posted: 09 Aug 2014 15:10
by dbenham
No, your examples can be explained by how undefined variable expansion works when extensions are enabled:
http://stackoverflow.com/a/7970912/1012053The example below helps to demonstrate the issue:
Code: Select all
@echo off
set "undefined="
echo %undefined:~0,10%
--- OUTPUT ---
The =:: variable actually does exist at some level on some machines. But some machines do not seem to have the variable. My current machine does not have it.
When I had a machine that had the variable, the value was ::\
When the variable exists, it can be seen by using SET "" or by disabling extensions and using ECHO %=::%. Extensions have to be disabled because the substring and search/replace syntax introduced with extensions interferes.
Dave Benham
Re: What is "=::" and does its value ever changes?
Posted: 09 Aug 2014 16:26
by penpen
I've read the linked post multiple times (up to now)... but i always seem to miss some details (
sorry for that, and thanks for linking the post again; for example the difference between these two cases):
Code: Select all
set "A=B"
echo %undefined:~0,10%A%A%
echo %undefined%A%A%
dbenham (linked post) wrote:•If VAR is undefined then
Remove %VAR: and continue scan.
(Hope this time, i have i read all ... .)
penpen
Re: What is "=::" and does its value ever changes?
Posted: 10 Aug 2014 11:49
by jeb
The important thing here is the point where the parsing of a variable expression restarts
set "A=B"
echo %undefined:~0,10%A%A%
echo %undefined%A%A%
In the first case the variable parser stops after the double colon, so the next percent sign is not the end of %undefined...%, instead it's the beginning of %A%
jeb
Re: What is "=::" and does its value ever change?
Posted: 05 Jan 2017 14:28
by npocmaka_
Something I can confirm on windows 8.1 and windows 7.
The
=:: is not there when the console is started with admin privileges (and is presented when the cmd is started with normal user).
Besides
subst and editing registry here's one
more way to set this variable (probably it is some 'fake' drive).Probably can be used for a fast (and not 100% reliable) check if the current user is admin.
I'll check on windows 10 too tomorrow , but I think it wont be available there (even in non admin privileged mode - there a lot of changes)
Re: What is "=::" and does its value ever change?
Posted: 30 Jan 2017 02:04
by NunoLava1998
This is what i get when i try to write %=::% into a file named test12__ then try to open it:
Code: Select all
test12__.txt is not a valid Win32 application.
No, seriously, i actually got that.
Opening it manually just reveals "Echo is ON", and i see that it's just 0x00. What??
Re: What is "=::" and does its value ever changes?
Posted: 30 Jan 2017 02:14
by NunoLava1998
dbenham wrote:No, your examples can be explained by how undefined variable expansion works when extensions are enabled:
http://stackoverflow.com/a/7970912/1012053The example below helps to demonstrate the issue:
Code: Select all
@echo off
set "undefined="
echo %undefined:~0,10%
--- OUTPUT ---
The =:: variable actually does exist at some level on some machines. But some machines do not seem to have the variable. My current machine does not have it.
When I had a machine that had the variable, the value was ::\
When the variable exists, it can be seen by using SET "" or by disabling extensions and using ECHO %=::%. Extensions have to be disabled because the substring and search/replace syntax introduced with extensions interferes.
Dave Benham
My machine also has the ::\ value (or 0x00) If i try to do anything within here, it's back to my current directory.
Re: What is "=::" and does its value ever change?
Posted: 30 Jan 2017 03:19
by thefeduke
I did have a practical use for these variables. Here are some scraps from my archives. I lost track of where on DOStips I based them.
Code: Select all
@Echo Off
:ExitInfo
Echo(
Echo(ExitInfo legacy list
Echo(List of active drive Current Directories:
Echo(=========================================
:: Alternate list methods in subroutine format
Call :CDs
Rem.Echo/List of active drive Current Directories - the hard way:
Echo(
Call :CDsComplex
Exit /B
:CDs
For /F "tokens=2 delims==" %%D IN ('set "" ^| findstr "^=[A-Z]:="') do Echo(%%D
Exit /B
:CDsComplex
:: Dependency JREPL.bat - expected if subfolder got defined
set "" | jrepl "(^=.:=)([^:])(.*)" "$2+$3" /jmatch
Exit /B
Output wrote:ExitInfo legacy list
List of active drive Current Directories:
=========================================
C:\Users\Yanci\Documents\Scripts
F:\
C:\Users\Yanci\Documents\Scripts
F:\
John A.
Re: What is "=::" and does its value ever change?
Posted: 30 Jan 2017 05:46
by mcnd
After some tests in W10 64bits
- The variable does not exists at the start
- After having started a cmd instance as administrator (right button on task bar icon), new cmd instances (non admin) executed with Win+R or from start menu show the variable.
- Once the variable is visible if a new cmd instance is started by Shif+RightClick on a folder + start command here, this instance does not show the variable, but this instance is created from a different parent process
- If I kill the explorer.exe that handles the current desktop and start a new one, new cmd instances don't show the variable.
It seems that the variable is associated to the explorer.exe that handles the desktop.
Executing an API monitor attached to the desktop explorer instance, I can see some requests to resolve shell extensions by low level file system functions
Code: Select all
RtlDosPathNameToNtPathName_U_WithStatus ( "::{52205FD8-5DFB-447D-801A-D0B52F2E83E1}.VisualElementsManifest.xml", 0x0000000012f5e6c0, NULL, NULL )
RtlIsDosDeviceName_U ( "::{52205FD8-5DFB-447D-801A-D0B52F2E83E1}.VisualElementsManifest.xml" )
For me, it seems that some shell operations are incorrectly handled and they end being processed by the functions that check for the `::` drive references and insert the current drive path into the environment block.
But it is just an opinion.
Re: What is "=::" and does its value ever change?
Posted: 30 Jan 2017 06:00
by npocmaka_
mcnd wrote:After some tests in W10 64bits
- The variable does not exists at the start
- After having started a cmd instance as administrator (right button on task bar icon), new cmd instances (non admin) executed with Win+R or from start menu show the variable.
- Once the variable is visible if a new cmd instance is started by Shif+RightClick on a folder + start command here, this instance does not show the variable, but this instance is created from a different parent process
- If I kill the explorer.exe that handles the current desktop and start a new one, new cmd instances don't show the variable.
It seems that the variable is associated to the explorer.exe that handles the desktop.
Executing an API monitor attached to the desktop explorer instance, I can see some requests to resolve shell extensions by low level file system functions
Code: Select all
RtlDosPathNameToNtPathName_U_WithStatus ( "::{52205FD8-5DFB-447D-801A-D0B52F2E83E1}.VisualElementsManifest.xml", 0x0000000012f5e6c0, NULL, NULL )
RtlIsDosDeviceName_U ( "::{52205FD8-5DFB-447D-801A-D0B52F2E83E1}.VisualElementsManifest.xml" )
For me, it seems that some shell operations are incorrectly handled and they end being processed by the functions that check for the `::` drive references and insert the current drive path into the environment block.
But it is just an opinion.
Great!
Sometimes I have "::" on my windows 10 machine , but I didn't know how make it appear.
On a machines with earlier versions of windows (xp,7,8) the variable is always there except when the command prompt is started with admin privileges.
Re: What is "=::" and does its value ever change?
Posted: 02 Feb 2017 10:44
by jfl
npocmaka_ wrote:Sometimes I have "::" on my windows 10 machine , but I didn't know how make it appear.
It seems that your memory is even worse than mine
Your own
post in 2014 above clearly shows how to make it appear!
I've just played with subst on my Windows 10 machine, and your results from 2014 are easily duplicated.
This is clearly the trace of the current directory, on a temporary drive letter ':' created using the subst command.
The '=::' variable simply remains even after the subst :: drive is deleted.
A hidden /k initialization script must run on non-admin cmd shells, and temporarily create that : drive.