无忧启动论坛

 找回密码
 注册
搜索
最纯净的「微PE装机优盘」UEPON大师作品系统gho:最纯净好用系统下载站数据恢复、数据保护、视频编辑
Win To Go 极致利器(IXUNCIS固态U盘)无忧启动网成立20周年!广告联系 QQ:184822951 微信:wuyouceo
查看: 1759|回复: 4

[分享] 各前辈,批处理 CALL 命令传递变量你倾向哪种方式

[复制链接]
发表于 2018-7-1 13:01:08 | 显示全部楼层 |阅读模式
各前辈,批处理 CALL 命令传递变量你倾向哪种方式

脚本功能是去除字符串前后空格的函数
第一种:
@echo off
set Title=                          Android 8.x.x 系统工具                          
call :dels "%Title%" Title
echo #%Title%#
pause
:dels
set abc=%~1
:delleft
if "%abc:~0,1%"==" " set abc=%abc:~1%&&goto delleft
:delright
if "%abc:~-1%"==" " set abc=%abc:~0,-1%&&goto delright
set %~2=%abc%
goto:eof

此种方式要提交两个参数.

第二种:
@echo off
set a=                          Android 8.x.x 系统工具                          
call :dels "%a%"
echo #%a%#
pause
:dels
set abc=%~1
:delleft
if "%abc:~0,1%"==" " set abc=%abc:~1%&&goto delleft
:delright
if "%abc:~-1%"==" " set abc=%abc:~0,-1%&&goto delright
for /f "tokens=1,2 delims==" %%i in ('set') do (if "%%j" equ "%~1" set %%i=%abc%)
goto:eof

此种方式提交1个参数即可.
发表于 2018-7-1 14:03:40 | 显示全部楼层
第一种,适用范围大些
可以在被调用函数里:
if %2 == ""
兼容2种情况
回复

使用道具 举报

发表于 2018-7-1 20:31:37 | 显示全部楼层
:delleft 段结束语句应该 是 exit /b ,而不是 goto :eof
回复

使用道具 举报

发表于 2019-11-8 16:50:30 | 显示全部楼层
for /f "tokens=1,2 delims==" %%i in ('set') do (if "%%j" equ "%~1" set %%i=%abc%)  这是何道理?没有明白
回复

使用道具 举报

发表于 2019-11-10 22:08:24 | 显示全部楼层
@echo off
setlocal enabledelayedexpansion

set "aaa=  测数 "
::call :去除字符串前后空格 "%aaa%" "aaa"
::call :去除字符串前后空格 "%aaa%"

::call :去除字符串前面空格 "%aaa%"
::call :去除字符串前面空格 "%aaa%" "aaa"

::call :去除字符串后面空格 "%aaa%"
::call :去除字符串后面空格 "%aaa%" "aaa"

echo --!aaa!--

pause
goto :eof

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:去除字符串前后空格
if "" EQU "%~1" goto :eof
set "b_tempstr=%~1"

:去除字符串前后空格_001
if " " EQU "!b_tempstr:~0,1!" set "b_tempstr=!b_tempstr:~1!" && goto :去除字符串前后空格_001

:去除字符串前后空格_002
if " " EQU "!b_tempstr:~-1!" set "b_tempstr=!b_tempstr:~0,-1!" && goto :去除字符串前后空格_002

if "" EQU "%~2" ( for /f "tokens=1,2 delims==" %%i in ('set') do (if "%%j" equ "%~1" set "%%i=!b_tempstr!" & goto :eof))
if "" NEQ "%~2" set "%~2=!b_tempstr!"
goto :eof

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:去除字符串前面空格
if "" EQU "%~1" goto :eof
set "b_tempstr=%~1"

:去除字符串前面空格_001
if " " EQU "!b_tempstr:~0,1!" set "b_tempstr=!b_tempstr:~1!" && goto :去除字符串前面空格_001
if "" EQU "%~2" ( for /f "tokens=1,2 delims==" %%i in ('set') do (if "%%j" equ "%~1" set "%%i=!b_tempstr!" & goto :eof))
if "" NEQ "%~2" set "%~2=!b_tempstr!"
goto :eof

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:去除字符串后面空格
if "" EQU "%~1" goto :eof
set "b_tempstr=%~1"

:去除字符串后面空格_001
if " " EQU "!b_tempstr:~-1!" set "b_tempstr=!b_tempstr:~0,-1!" && goto :去除字符串后面空格_001

if "" EQU "%~2" ( for /f "tokens=1,2 delims==" %%i in ('set') do (if "%%j" equ "%~1" set "%%i=!b_tempstr!" & goto :eof))
if "" NEQ "%~2" set "%~2=!b_tempstr!"
goto :eof
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2020-10-31 18:47

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表