[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "useback delims=" %%a in ("%~f0") do (
  4. set /a _n+=1
  5. set _!_n!=%%a
  6. )
  7. for /f "delims=" %%a in ('set _') do (
  8. if not defined _end (
  9. endlocal
  10. set _end=1
  11. )
  12. set %%a
  13. )
  14. set _end=
  15. set _
  16. pause
复制代码
bat小白,请多指教!谢谢!

TOP

本帖最后由 qixiaobin0715 于 2024-8-23 10:32 编辑

个人不喜欢call、goto这样的跳转命令,所以也不是太懂,大概就是这样子:
  1. @echo off
  2. for /l %%i in (1,1,3) do (
  3.     set str=%%i
  4.     setlocal enabledelayedexpansion
  5.     set str=0!str!
  6.     call :o
  7.     endlocal
  8. )
  9. echo,####%str%
  10. pause
  11. :o
  12. echo,%str%
复制代码

TOP


有关 !var! 续命给 %var% 是批处的一个经典话题,其中有一个 ‘坑’ 就是不能在复合语块(例如 for 或 if 括号内部)中完成,原因是cmd预处理要对复合语块中的所有 %var% 预赋值...

TOP

回复 1# newswan
我想在endlocal前,使用call命令跳转到变量延迟开关外面,暂不执行endlocal,使用完变量后再关闭变量延迟开关,应当可行。

TOP

这样子么,不过得先弄成统一前缀格式的变量名,
可能不支持某些特殊字符,还有当前代码页不支持的字符会变成问号

for /f "tokens=1* delims==" %%a in ('set 变量名') do (
if "!aaa!" == "%aaa%" endlocal
set "%%a=%%b"
)
2

评分人数

TOP

返回列表