无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 4606|回复: 4
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
发表于 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个参数即可.
2#
发表于 2018-7-1 14:03:40 | 只看该作者
第一种,适用范围大些
可以在被调用函数里:
if %2 == ""
兼容2种情况
回复

使用道具 举报

3#
发表于 2018-7-1 20:31:37 | 只看该作者
:delleft 段结束语句应该 是 exit /b ,而不是 goto :eof
回复

使用道具 举报

4#
发表于 2019-11-8 16:50:30 | 只看该作者
for /f "tokens=1,2 delims==" %%i in ('set') do (if "%%j" equ "%~1" set %%i=%abc%)  这是何道理?没有明白
回复

使用道具 举报

5#
发表于 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, 2024-11-30 17:31

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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