批处理中怎样在变量中引用变量?

number321 2014-08-23 05:39:23
set filename=test_2014-8-23.rar
set newname=%filename:_2014-8-23=%

这样可以把filename中的_2014-8-23部分替换成空,给变量newname

但现在这个要替换的部分,我也是以一个变量的形式赋值的,请问这种情况下应该怎么写呢
...全文
1114 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
number321 2014-09-05
  • 打赏
  • 举报
回复
谢谢,这次在循环中也可以了,虽然不知道什么原理,但是感觉很厉害的样子
ljc007 2014-09-05
  • 打赏
  • 举报
回复
引用 10 楼 number321 的回复:
谢谢,这次在循环中也可以了,虽然不知道什么原理,但是感觉很厉害的样子
请点击左上角“结帖”按钮。
frauzhou 2014-09-05
  • 打赏
  • 举报
回复
引用 7 楼 ljc007 的回复:
[quote=引用 1 楼 frauzhou 的回复:] 你没写对。递归不是这么递归的。 以下不是程序,是说明。我不是程序员,不会写程序。忘了“:”什么意思。但你逻辑有问题。 刚才查了一下,:=替换。 如果filename=test_2014-8-23.rar “set newname=%filename:_2014-8-23=%” 那你的实际结果就是:newname=显示出的名字是:(test_2014-8-23.rar 转向 _2014-8-23.rar)=_2014-8-23.rar 这里按你的设定 filename=A;newname=一碰到A值匹配,就转到: B值。A和B为任意值。
楼主的逻辑没有问题 只是你还没学会而已 [/quote] 不是学的问题。是太多东西要碰到了才会想起来:“哦,对的,是还有这回事”。而且,基本上所有的程序全都混一块了,根本搞不清楚谁是谁的了。反正看到了大概能知道是哪个方向,如果不嫌费力气,有耐心往那个方向找答案,看了答案知道哪个答案是对的。
frauzhou 2014-09-05
  • 打赏
  • 举报
回复
引用 7 楼 ljc007 的回复:
[quote=引用 1 楼 frauzhou 的回复:] 你没写对。递归不是这么递归的。 以下不是程序,是说明。我不是程序员,不会写程序。忘了“:”什么意思。但你逻辑有问题。 刚才查了一下,:=替换。 如果filename=test_2014-8-23.rar “set newname=%filename:_2014-8-23=%” 那你的实际结果就是:newname=显示出的名字是:(test_2014-8-23.rar 转向 _2014-8-23.rar)=_2014-8-23.rar 这里按你的设定 filename=A;newname=一碰到A值匹配,就转到: B值。A和B为任意值。
楼主的逻辑没有问题 只是你还没学会而已 [/quote] 都十多年没碰过任何程序了,也不是编程这行业的。好多东西全都忘了。windows 除了开关机,其它全都都不会用了。现看到什么觉得面熟,就找什么查。不想查觉得烦就瞎蒙。
ljc007 2014-09-04
  • 打赏
  • 举报
回复
@echo off
setlocal enabledelayedexpansion
set "filename=test_2014-8-23.rar"
set "str=_2014-8-23"
for /l %%i in (1,1,3) do (
    call set "newname=%%filename:%str%=%%"
    echo !newname!
)
pause
number321 2014-09-04
  • 打赏
  • 举报
回复
引用 6 楼 ljc007 的回复:
set "filename=test_2014-8-23.rar"
set "str=_2014-8-23"
call set "newname=%%filename:%str%=%%"
echo %newname%
谢谢,这样确实是好的。 可是如果是用在循环中,采用了setlocal EnableDelayedExpansion和!来代替%号的情况下,又应该怎么办呢,同样的表达式在这种情况下好像就不管用了
ljc007 2014-09-02
  • 打赏
  • 举报
回复
引用 1 楼 frauzhou 的回复:
你没写对。递归不是这么递归的。 以下不是程序,是说明。我不是程序员,不会写程序。忘了“:”什么意思。但你逻辑有问题。 刚才查了一下,:=替换。 如果filename=test_2014-8-23.rar “set newname=%filename:_2014-8-23=%” 那你的实际结果就是:newname=显示出的名字是:(test_2014-8-23.rar 转向 _2014-8-23.rar)=_2014-8-23.rar 这里按你的设定 filename=A;newname=一碰到A值匹配,就转到: B值。A和B为任意值。
楼主的逻辑没有问题 只是你还没学会而已
ljc007 2014-09-02
  • 打赏
  • 举报
回复
set "filename=test_2014-8-23.rar"
set "str=_2014-8-23"
call set "newname=%%filename:%str%=%%"
echo %newname%
number321 2014-08-29
  • 打赏
  • 举报
回复
主要是我的这个脚本里面启动了rar.exe来压缩文件,但是服务器禁用了wscript.shell组件,所以没办法直接写成一个VBS
赵4老师 2014-08-26
  • 打赏
  • 举报
回复
劝楼主直接转VBScript或CScript
frauzhou 2014-08-24
  • 打赏
  • 举报
回复
引用 1 楼 frauzhou 的回复:
[quote=引用 楼主 number321 的回复:] set filename=test_2014-8-23.rar set newname=%filename:_2014-8-23=% 这样可以把filename中的_2014-8-23部分替换成空,给变量newname
你没写对。递归不是这么递归的。 以下不是程序,是说明。我不是程序员,不会写程序。忘了“:”什么意思。但你逻辑有问题。 刚才查了一下,:=替换。 如果filename=test_2014-8-23.rar “set newname=%filename:_2014-8-23=%” 那你的实际结果就是:newname=显示出的名字是:(test_2014-8-23.rar 转向 _2014-8-23.rar)=_2014-8-23.rar 这里按你的设定 filename=A;newname=一碰到A值匹配,就转到: B值。A和B为任意值。[/quote] 还有一种可能,如果 “- ”=其它含义,没时间替你查找了。那么实际结果就不是_2014-8-23.rar,比如,假设有种可能是等于运算符,而是不-连接符,那么你的结果就是_1983.rar
frauzhou 2014-08-24
  • 打赏
  • 举报
回复
引用 楼主 number321 的回复:
set filename=test_2014-8-23.rar set newname=%filename:_2014-8-23=% 这样可以把filename中的_2014-8-23部分替换成空,给变量newname 但现在这个要替换的部分,我也是以一个变量的形式赋值的,请问这种情况下应该怎么写呢
如果你想要用C值替换掉A值,C也为任意值,并且和A是同类型。 或许你需要先对C的属性,进行和A匹对的定义。然后再进行替换。 我不知道,我瞎猜的,我是跳广场舞买菜煮粥的老太太,不会写程序。
frauzhou 2014-08-24
  • 打赏
  • 举报
回复
引用 楼主 number321 的回复:
set filename=test_2014-8-23.rar set newname=%filename:_2014-8-23=% 这样可以把filename中的_2014-8-23部分替换成空,给变量newname
你没写对。递归不是这么递归的。 以下不是程序,是说明。我不是程序员,不会写程序。忘了“:”什么意思。但你逻辑有问题。 刚才查了一下,:=替换。 如果filename=test_2014-8-23.rar “set newname=%filename:_2014-8-23=%” 那你的实际结果就是:newname=显示出的名字是:(test_2014-8-23.rar 转向 _2014-8-23.rar)=_2014-8-23.rar 这里按你的设定 filename=A;newname=一碰到A值匹配,就转到: B值。A和B为任意值。

6,850

社区成员

发帖
与我相关
我的任务
社区描述
Windows 2016/2012/2008/2003/2000/NT
社区管理员
  • Windows Server社区
  • qishine
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧