MS-Win-CMD PushD/PopD 它是如何工作的以及为什么不在 "For /f"-Loop 中
MS-Win-CMD PushD/PopD how it work and why not in a "For /f"-Loop
在我一次又一次找不到答案后,我写了这些脚本:
<!-- : 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...
我希望你明白我为什么写这个脚本,也希望你喜欢给我很多评论,这样我们就可以找出哪里出了问题......
(嘿不在我的脑海里 - 我希望 :-)
我的目标 Post 是
的作品
for /f %a in ('PushD') do PopD
A for /F
在新的 cmd.exe 上下文中启动命令。
因此 pushd 在那里执行,然后上下文将被关闭。
新 cmd.exe 中的 pushd 根本不影响父上下文。
因此 popd 不会恢复 pushd。
如果你只想弹出所有 pushd 的,你可以使用循环
@echo off
setlocal EnableDelayedExpansion
pushd C:\windows\
pushd c:\windows\system32
:popd_all
echo #: !cd!
popd && goto popd_all
此方法的工作方式与您的代码中使用的方式相同,带有 for /f
循环:
@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)
在我一次又一次找不到答案后,我写了这些脚本:
<!-- : 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...
我希望你明白我为什么写这个脚本,也希望你喜欢给我很多评论,这样我们就可以找出哪里出了问题...... (嘿不在我的脑海里 - 我希望 :-)
我的目标 Post 是
的作品for /f %a in ('PushD') do PopD
A for /F
在新的 cmd.exe 上下文中启动命令。
因此 pushd 在那里执行,然后上下文将被关闭。
新 cmd.exe 中的 pushd 根本不影响父上下文。
因此 popd 不会恢复 pushd。
如果你只想弹出所有 pushd 的,你可以使用循环
@echo off
setlocal EnableDelayedExpansion
pushd C:\windows\
pushd c:\windows\system32
:popd_all
echo #: !cd!
popd && goto popd_all
此方法的工作方式与您的代码中使用的方式相同,带有 for /f
循环:
@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)