批处理之家's Archiver

albenlee 发表于 2020-2-16 19:06

批处理怎样通过变量扩充获取文件名?

有代码如下:[code]@echo off
set p="d:\aa.txt"
rem 此处应该如何写?
echo %~np
pause[/code]本来的意图是想输出文件名aa,执行效果是一闪而过。
怎么通过变量扩充的方式,并且不在for里边

red2020 发表于 2020-2-17 00:03

变量中转[code]@echo off
set p="d:\aa.txt"
rem 此处应该如何写?
for %%a in (%p%) do (
        echo;%%~na
)
pause[/code]

Batcher 发表于 2020-2-17 09:40

[b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=226585&ptid=54860]1#[/url] [i]albenlee[/i] [/b][code]@echo off
set p="d:\aa.txt"
call :GetName %p%
pause
goto :eof

:GetName
echo %~n1
goto :eof[/code]

albenlee 发表于 2020-2-17 10:28

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=226600&ptid=54860]3#[/url] [i]Batcher[/i] [/b]
看来还是得用命令行参数和for变量。

albenlee 发表于 2020-2-17 10:29

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=226596&ptid=54860]2#[/url] [i]red2020[/i] [/b]
我是想不用for和命令行参数

Batcher 发表于 2020-2-17 11:13

[b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=226602&ptid=54860]5#[/url] [i]albenlee[/i] [/b]


    没有你希望的那种用法[img]http://bbs.bathome.net/images/smilies/default/lol.gif[/img]

m91opse 发表于 2020-2-23 13:26

[i=s] 本帖最后由 m91opse 于 2020-2-23 15:28 编辑 [/i]

[code]
::echo指定路径回显指定文件名程序 注释文
::@echo off从本行开始关闭回显。一般批处理第一行都是这个
::&批处理命令特殊符号 & 连接符号
::SETLOCAL ENABLEDELAYEDEXPANSION 延迟变量,全称延迟环境变量扩展
::set:设置 local:本地(环境变量)enable:能够 delayed:延迟 expansion:扩展
::set local enable delayed expansion 就是扩展本地环境变量延迟
::@echo off&SETLOCAL ENABLEDELAYEDEXPANSION

::set设置变量
::p 变量名
::d:\aa.txt盘符路径和文件名及扩展名
::""双引号用于解释完整路径和文件名及扩展名,同时路径和文件中有特殊字符或者空格,可以识别解释。
::set "p=d:\aa.txt"

::rem命令简介注释命令,在C语言中相当于/*----------*/,它并不会被执行,只是起到一个注释的作用,便于别人及自己将来阅读和维护脚本。
::rem是一条命令,在运行的时候相当于把rem本身及其后面的内容置空。既然它是一条命令,就必须处于单独的一行或者有类似“&”的连接符号连接
::rem 应该这么写!

::echo回显命令,后面的我就不知道了?
::echo !%%~np!!p:~3,2%!

::暂停命令
::pause

::以下源程序运行代码
@echo off&SETLOCAL ENABLEDELAYEDEXPANSION
set "p=d:\aa.txt"
rem 应该这么写!
echo !%%~np!!p:~3,2%!
pause
[/code]我不太懂编程的,我这是乱套,套出来的。哈哈哈。
其实,也不是完全套出来的,是大哥的指导
在加上,我查阅的资料
大概,套出这个写法。
定义的变量
echo %p:~6,3%          #显示第6个字符以后的3个字符,即aa2
还有 !百度了一下,好像跟%百分号是取变量的值,但是,!感叹号还有个功能好像是变量延迟扩展
SETLOCAL ENABLEDELAYEDEXPANSION 这个也是关于变量延迟的
花了蛮久时间!
我解释的不是很好,本人也是个菜鸟,请问有没有大哥大姐,解释下这个代码,具体运行含义?

但是,编程还是要注意写好注释,不写注释都不是合格的程序员。这话是真的。
就算厉害的程序员老手,不写注释,N年后,他自己也看不懂自己以前写的编程是什么逻辑了?
虽然,写注释麻烦点,但给以后带来很大的便利。比如:查找程序问题,写注释的比没写注释的,查程序错误要快的多。
所以,写编程注释也是一门必修课。
上面的编程注释,如同开篇前言,看了下,就明白下面运行程序,大概什么逻辑意思了。是不是很方便了。
而且,这才是编程注释文,正确编辑方式。
写个注释只是暂时麻烦点,以后就是永久方便了。OK
如果是:程序很多条,还是要写注释,不全部写,但重要的程序地方特别要注释清晰。

重要提示,写注释文,还有个非常重要的好处就是逻辑清晰,而且,还可以防止程序代码多,造成偷跑的严重问题?
偷跑是什么意思,解释下:
偷跑就是,由于程序代码很多,逻辑不清晰,有的程序命令是可以做多个动作的,
而由于逻辑不清晰混乱,这就容易造成,程序即做了你要求的事,
但同时,由于逻辑不清晰混乱又没有条理性,又不写注释增加逻辑清晰和条理性,造成程序在做你的事情后,又做了你不知道的事情,称为偷跑。这是最危险的。
这是编程最大忌讳。
所以,注释文是必须的。解决程序偷跑行为,最好的办法。
所以,上面说不写注释的程序员,都不算合格的程序员,这句话是有道理的。
有的人觉得没什么大不了的,但是,这种事确实存在的。只是看不看到的问题
比如说:千年虫事件。只是说有些类同。让人们惊恐一场,但要是这个错误严重了,那怕是连改的机会都没有。
所以,不如现在就把那些不好的编程习惯,改过来。这才是正确的打开方式。
在这不是说谁的技术不如谁,而是说,纠正错误。

red2020 发表于 2020-2-23 14:46

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=226715&ptid=54860]7#[/url] [i]m91opse[/i] [/b]

不写注释就是耍流氓

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.