Reputation: 48
After I faild again and again to find the answer I wrote these Script:
<!-- : first Line of "JustPopdBack.cmd"-Script (a CMD+Script for Windows)
@echo off %debug%
setLocal enableExtensions
:: Copyleft 2017 Markus Merkle (aka Mäx) - Licence: GNU-GPLv3
:: ----------------------------------------------------------------------------
:: Cause it seems stupid to make a short Script long just for Right
:: of the Author, so the Licence-Text is not embeded in this Script.
:: !!! Please have a look on <http://www.gnu.org/licenses/>
:: if you still don't know the GNU-GPLv3.
:: ----------------------------------------------------------------------------
:: This is just a free and open TestScript
:: Feel free to used or modify but please mark this work (how as done).
:: -----------------------------------------------------------------------------
title JustPopdBack-Test
color 0a %= cause I like LightGreen on Black =%
echo.
echo. Just a Test-Script for PushD and PopD Command
echo.
echo. To use it please Enter some Directorys first
echo. Don't shy to use diffrent Drives (C:\ or D:\ etc. )
echo. ...and feel free to use the TAB-Key then...
echo. Lets PushD in this Dir and after just Enter Nothing Popd out.
::******************************************************************************
:dLoop for UserQuest and Pushd in
echo.
set "NxtDir="
set /P "NxtDir=NextDir? :\> "
if defined NxtDir (PushD %NxtDir% & goTo dLoop)
::------------------------------------------------------------------------------
echo.
echo. Lets see the PushD History
pushD
echo. now try again with "For /F"-Loop a PopD Back.
for /f %%a in ('pushD') do (echo %%a && PopD)
echo.
echo This don't work - did you know why?
timeOut -1
:*******************************************************************************
:PopDback that will work
PopD && Echo. Uh I PopD'd - let's'ee PushD now: && PushD && goTo PopDback
:: but I don't like that - can you help to make me happy ?
--------------------------------------------------------------------------------
timeout -1
color
exit /b %= That the End of this Script =%
:: Thnx to all my Teachers
:: ...but the realy ones not the called & most have just 60 Minutes for me...
I hope you see why I wrote this Script and also hope all you like to give me many comments so we can find out what is going wrong here and maybe there ... (hey not in my Head - I hope :-)
My Targed of this Post is a Working of
for /f %a in ('PushD') do PopD
Upvotes: 2
Views: 2574
Reputation: 67216
This method works in the way to used in your code, with a for /f
loop:
@echo off
setlocal
pushd C:\windows\
pushd c:\windows\system32
pushd > "%tmp%\pushd.txt"
for /f "usebackq delims=" %%a in ("%tmp%\pushd.txt") do (echo %%a & PopD)
Upvotes: 1
Reputation: 82287
A for /F
starts the command in a new cmd.exe context.
Therefore the pushd is executed there and then the context will be closed.
The pushd in the new cmd.exe doesn't affect the parent context at all.
Therefore the popd doesn't revert the pushd.
If you only want to popd all pushd's you could use a loop
@echo off
setlocal EnableDelayedExpansion
pushd C:\windows\
pushd c:\windows\system32
:popd_all
echo #: !cd!
popd && goto popd_all
Upvotes: 4