Board logo

标题: [其他] Virtual Handle——模拟句柄操作 [打印本页]

作者: bailong360    时间: 2016-1-2 16:08     标题: Virtual Handle——模拟句柄操作

本帖最后由 bailong360 于 2016-1-2 16:09 编辑

在硬盘里翻到的
发出来水一帖
  1. ::模拟句柄操作
  2. ::aiwozhonghuba 2015-1-25
  3. ::输入示范:>nul 2>nul 3>nul 4>nul 5>nul 6>nul 7>nul 8>nul 9>nul
  4. @Echo Off&SetLocal EnableDelayedExpansion&Title Virtual Handle
  5. :Main
  6. Set /P Argus=Please enter the code:
  7. Set "New_Argus= "
  8. If Not "%Last%"=="TRUE" (
  9.     For %%a In (0 1 2) Do Set "Handle%%a=con              "
  10.     For /L %%a In (0x3 1 0x12) Do Set "Handle%%a=              "
  11.     Set "Last=FALSE"
  12. )
  13. For %%a In ("%Argus: =" "%") Do (
  14.     Set "Argu=%%~a"
  15.     If "!Argu:~0,1!"==">" Set "Argu=1!Argu!"
  16.     If "!Argu:~0,1!"=="<" Set "Argu=0!Argu!"
  17.     For /F "Delims=><& Tokens=1,2" %%b In ("!Argu!") Do (
  18.         Set "Handle=%%~b"
  19.         For %%d In (!Handle:~-1!) Do (
  20.             Set "Set_Handle%%~d=%%~c"
  21.             Set "New_Argus=!New_Argus:%%~d =!%%~d "
  22.         )
  23.     )
  24. )
  25. Set "New_Argus=%New_Argus:~1%"
  26. Call :Start "%New_Argus: =" "%"
  27. Goto Main
  28. :Start
  29. Echo                                      初始状态
  30. Call :Show_Handle
  31. Echo                                    备份及重定向
  32. :Bak_Redir
  33. If "%~1"=="" (
  34.     Echo                                      句柄取回
  35.     Goto Recover
  36. )
  37. If "!Handle0_bak!"=="%~1" Echo 句柄%~1为句柄0备份&Echo 无法更改此句柄指向&Pause>nul&Exit
  38. Set "Argu=%~1"
  39. Set "Object=!Set_Handle%~1!"
  40. Set Bak_Finished=FALSE
  41. For /L %%a In (0x0 1 0x12) Do (
  42.     If "!Handle%%a: =!"=="" (
  43.         If Not !Bak_Finished!==TRUE (
  44.             If Not "!Handle%~1: =!"=="" (
  45.                 If Not %%a Geq 10 Echo                                     %~1[!Handle%~1: =!]=^>%%a[!Handle%%a: =!]
  46.                 Set "Handle%~1_bak=%%a"
  47.                 Set "Handle%%a=!Handle%~1: =!              "
  48.                 Call :Show_Handle
  49.             ) Else Set "Handle%~1_bak_none=TRUE"
  50.             If Defined Handle%Object% (
  51.                 If "!Handle%Object%: =!"=="" Echo 重定向句柄!Argu:~0,1!时&Echo 无法复制此句柄&Pause>nul&Exit
  52.                 Echo                                     %~1[!Handle%~1: =!]^<=%Object%[!Handle%Object%: =!]
  53.                 Set "Handle%~1=!Handle%Object%: =!              "
  54.             ) Else (
  55.                 Echo                                     %~1[!Handle%~1: =!]^<="%Object%"
  56.                 Set "Handle%~1=%Object%              "
  57.             )
  58.             Set Bak_Finished=TRUE
  59.         )
  60.     )
  61. )
  62. Call :Show_Handle
  63. Shift
  64. Goto Bak_Redir
  65. :Recover
  66. For /L %%a In (0x0 1 0x12) Do (
  67.     If Defined Handle%%a_bak (
  68.         For %%b In (!Handle%%a_bak!) Do (
  69.             Set "Bak=!Handle%%a_bak!"
  70.             If %%b Gtr 9 Set "Bak=?"
  71.             Echo                                     %%a[!Handle%%a: =!]^<=!Bak![!Handle%%b: =!]
  72.             Set "Handle%%a=!Handle%%b: =!              "
  73.             Set "Handle!Handle%%a_bak!=              "
  74.             Set Handle%%a_bak=
  75.             Call :Show_Handle
  76.         )
  77.     ) Else If Defined Handle%%a_bak_none (
  78.         Set "Handle%%a=              "
  79.         Echo                                     %%a[!Handle%%a: =!]^<=[]
  80.         Call :Show_Handle
  81.     )
  82. )
  83. Set Last=TRUE
  84. Echo                                      最终状态
  85. Call :Show_Handle
  86. Goto Main
  87. :Show_Handle
  88. For /L %%i In (0 1 9) Do Set /P=%%i=!Handle%%i:~0,6!<nul
  89. Echo;
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2