把以前的老帖翻出来炒冷饭- :: 句柄模拟.cmd - 模拟运算句柄操作后的句柄状态
- :: qzwqzw - 2009-6-12
- @echo off & setlocal EnableDelayedExpansion
- if [%1]==[] (
- echo. 这是句柄操作示例, 模拟运算进行几次句柄操作后的句柄状态
- echo --------------------- call %~n0 ">nul" "2>nul" ---------------------
- call %0 ">nul" "2>nul"
- set 句柄
- echo.
- echo --------------------- call %~n0 ">nul" "2>nul" "3>nul" ---------------------
- call %0 ">nul" "2>nul" "3>nul"
- set 句柄
- echo.
- echo --------------------- call %~n0 ">nul" "2>&1" "3>&1" ---------------------
- call %0 ">nul" "2>&1" "3>&1"
- set 句柄
- echo.
- echo --------------------- call %~n0 ">nul" "3>nul" "4>nul" ---------------------
- call %0 ">nul" "3>nul" "4>nul"
- set 句柄
- echo.
- echo --------------------- call %~n0 "3>nul" "4>nul" ---------------------
- call %0 "3>nul" "4>nul"
- set 句柄
- echo.
- pause
- goto :eof
- )
- set "0=con" & set "1=con" & set "2=con"
- for %%h in (%句柄%) do set %%h
- echo.----- 起始状态 Initiation state -----
- for %%h in (0 1 2 3 4 5 6 7 8 9) do set/p=%%h=!%%h! <nul
- echo.
-
- echo.----- 预处理 Pre-process -----
- :loop
- if [%1]==[] goto :end
- echo.----- %1 -------
- set "_tmp=%~1"
- if "%_tmp:~0,1%"=="<" set "_tmp=0%_tmp%"
- if "%_tmp:~0,1%"==">" set "_tmp=1%_tmp%"
- set _句柄=%_tmp:~0,1%
- set _句柄_2=
- set _dev=
- if "%_tmp:~2,1%"=="&" (set _句柄_2=%_tmp:~3%) else (set _dev=%_tmp:~2%)
- for %%h in (0 1 2 3 4 5 6 7 8 9) do (
- if "!%%h!"=="" (
- set/p=b: %_句柄%[!%_句柄%!]=^>%%h[!%%h!] : <nul
- set "%%h=!%_句柄%!"
- set bak_%%h=%_句柄%
- goto :set
- )
- )
- :set
- for %%h in (0 1 2 3 4 5 6 7 8 9) do set/p=%%h=!%%h! <nul
- echo.
- if defined _dev (
- set/p=a: %_dev%=^>%_句柄%[!%_句柄%!] : <nul
- set %_句柄%=%_dev%
- ) else if defined _句柄_2 (
- set/p=a: %_句柄_2%[!%_句柄_2%!]=^>%_句柄%[!%_句柄%!] : <nul
- set %_句柄%=!%_句柄_2%!
- )
- for %%h in (0 1 2 3 4 5 6 7 8 9) do set/p=%%h=!%%h! <nul
- echo.
- shift
- goto :loop
-
- :end
- echo.----- 后处理 Post-process -----
- for %%h in (0 1 2 3 4 5 6 7 8 9) do (
- if not "!bak_%%h!"=="" (
- set/p=r: !bak_%%h![]^<=%%h[!%%h!] : <nul
- set !bak_%%h!=!%%h!
- set %%h=
- set bak_%%h=
- for %%h in (0 1 2 3 4 5 6 7 8 9) do set/p=%%h=!%%h! <nul
- echo.
- )
- )
- set 句柄=
- for %%h in (0 1 2 3 4 5 6 7 8 9) do set 句柄=!句柄! "%%h=!%%h!"
- endlocal & set 句柄=%句柄%
- echo.----- 结束状态 End Status -----
- for %%h in (%句柄%) do set/p=%%~h <nul
- echo.
复制代码
|