|
kennyfan
中级用户
  
积分 259
发帖 112
注册 2006-9-18
状态 离线
|
『楼 主』:
问题! 将某些文子代入到 任意文件中!
使用 LLM 解释/回答一下
要达到的目的是 将two导入到输入的txt文件中 下列代码到底有什么错?
@echo off
set /p file=
echo %file%|findstr /i "\.txt$">nul & goto one
:one
for /f %%i in ('%file%|findstr /i "\.txt$"') do set new = new%%i
@echo two >> "%new%"
pause >nul
|
|
2006-9-22 00:19 |
|
|
pengfei
银牌会员
    
积分 1218
发帖 485
注册 2006-7-21 来自 湖南.娄底
状态 离线
|
『第 2 楼』:
使用 LLM 解释/回答一下
楼主的代码存在诸多问题, 修正无法写入代码如下:
@echo off
set /p file=
echo %file%|findstr /i "\.txt$" >nul && goto one
:one
for /f %%i in ('echo %file%^|findstr /i "\.txt$"') do & set new=new%%i
echo two>>%new%
pause
Last edited by pengfei on 2006-9-22 at 00:46 ]
|

业精于勤而荒于嬉,形成于思而毁于随。 |
|
2006-9-22 00:33 |
|
|
3742668
荣誉版主
      
积分 2013
发帖 718
注册 2006-2-18
状态 离线
|
『第 3 楼』:
使用 LLM 解释/回答一下
1."echo %file%|findstr /i "\.txt$">nul & goto one"
这句多余,因为后面用的&号,而且没有其它的跳转语句,所以不论执行情况如何都会按顺序执行到标号one处,即使不存在这句也是一样。
2.“for /f %%i in ('%file%|findstr /i "\.txt$"') do set new = new%%i”
在for语句的in()部分,貌似应该为 echo %file% ^ findstr /i ".txt$"',即没有前面的echo,也没有|前面的转义符^
另外,由于没有启用延迟环境变量,set new=new%%i其实执行的结果应该为set new=%%i
不大明白你的意图,如果想把two写到文件中直接用echo two >> %file% 就可以了,如果需要对文件类型做出限制也不需要用到for,直接用findstr后面接&&跳转就行了。
|
|
2006-9-22 00:41 |
|
|
pengfei
银牌会员
    
积分 1218
发帖 485
注册 2006-7-21 来自 湖南.娄底
状态 离线
|
『第 4 楼』:
使用 LLM 解释/回答一下
楼主代码第一个判断语句存在两个问题:
1. echo %file%|findstr /i "\.txt$">nul & goto one 这里无论输入的是否为文本文档都将跳转到 one;
2. echo %file%|findstr /i "\.txt$" >nul && goto one 虽然&&解决了错误就不执行, 但楼主这句下面就是执行代码, 所以还是无法达到要求的非txt文件就不执行写入操作的要求.
这里楼主的错误判断出了问题, 而用下面的for再次执行判断, 显然第一个判断就不没有存在的必要.
3. for /f %%i in ('echo %file%^|findstr /i "\.txt$"') do echo %%i & set new=new%%i 如果楼主选用第一个判断, 这里就出现重复判断的毛病.
代码精简如下:
@echo off
set /p file=请输入:
echo %file:~-4%|findstr /i ".txt" >nul && goto start
echo 对不起, 您的输入有误, 即将退出...
pause
exit
:start
echo two>>new%file%
pause
|

业精于勤而荒于嬉,形成于思而毁于随。 |
|
2006-9-22 00:46 |
|
|
namejm
荣誉版主
       batch fan
积分 5226
发帖 1737
注册 2006-3-10 来自 成都
状态 离线
|
『第 5 楼』:
使用 LLM 解释/回答一下
『第 2 楼』的代码和楼主的代码都存在一个逻辑错误:无论:one的上一句成功与否,都会执行:one之后的内容,因为CMD的执行是从上至下顺序执行的——如果其中没有跳转语句的话。修改之后的代码如下:
@echo off
:input
cls
set file=
set /p file= 请输入文本文件路径:
for %%i in ("%file%") do (
echo %%~ai|find /i "d">nul && goto input
)
if /i not "%file:~-4%"==".txt" goto :input
echo %file%
set new=new%file%
echo two>>%new%
pause
|

尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。 |
|
2006-9-22 00:50 |
|
|
kennyfan
中级用户
  
积分 259
发帖 112
注册 2006-9-18
状态 离线
|
|
2006-9-22 01:09 |
|