Board logo

标题: [文本处理] 批处理如何批量读取文件名,并定义为变量? [打印本页]

作者: 沙漠之狐    时间: 2018-4-27 13:00     标题: 批处理如何批量读取文件名,并定义为变量?

文件夹中有n个文件,使用命令 for /f "delims=." %%i in ('dir /b  "%FolderName%\Day-*-%YYYYmmdd%*.txt"') do (echo %%i) 屏显输出的结果刚好是自己想要的字符。怎么把%%i赋值给变量。如用 ~~~ do (set str=%%i) echo %str% 只显示最后一个文件名(一共有4个文件名);如用  for /f "delims=." %%i in ('dir /b  "%FolderName%\Day-*-%YYYYmmdd%*.txt"') do (echo %%i %%j %%k %%l) ,则每个文件名后面多了%j %k %l,求解析指教。用for循环怎么把这4个文件名分别定义为4个变量。谢谢
作者: Batcher    时间: 2018-4-27 14:01

  1. setlocal enabledelayedexpansion
  2. set n=0
  3. for /f "delims=." %%i in ('dir /b  "%FolderName%\Day-*-%YYYYmmdd%*.txt"') do (
  4.     set /a n+=1
  5.     set "_!n!=%%i"
  6. )
  7. for /f "tokens=1,2 delims==" %%i in ('set _') do (
  8.     echo 变量 %%i 的值是 %%j
  9. )
复制代码

作者: 沙漠之狐    时间: 2018-4-27 16:32

回复 2# Batcher
延迟变量好复杂,在论坛泡了好久对这个感叹号还是糊里糊涂的,能有简单点的吗?就是这么把文件1赋值给:str1=文件名1;str2=文件名2,str3=文件名3,str4=文件名4;分别echo出来;谢谢
作者: Batcher    时间: 2018-4-27 17:48

回复 3# 沙漠之狐
  1. setlocal enabledelayedexpansion
  2. set n=0
  3. for /f "delims=." %%i in ('dir /b  "%FolderName%\Day-*-%YYYYmmdd%*.txt"') do (
  4.     set /a n+=1
  5.     set "str!n!=%%i"
  6. )
  7. echo !str1!
  8. echo !str2!
  9. echo !str3!
  10. echo !str4!
复制代码

作者: 沙漠之狐    时间: 2018-4-27 17:56

回复 2# Batcher


    不停的折腾,终于把您的代码看明白了,谢谢!!!!
作者: 沙漠之狐    时间: 2018-4-27 18:08

回复 4# Batcher


    在您没回复之前,_!n!,n前面这一杠让我想了好久,到底什么意思,又花了2个小时查找set 的定义,发现没这个东西呀,最后在发现另一帖子,相似个例,原来就是一变量字符,我晕,从来见过这么定义变量的。误导我这菜鸟了 。最后又回到输出问题上,echo %_!1!% 不对,echo !_!1!!不对, echo %_1%  不对。echo !_1!对了。我勒个去。最后发现,setlocal disabledelayedexpansion  把它关了,就可以常规 echo %_1%输出了,也不影响后续操作。bat 路漫漫其修远兮!!!!!谢谢您,




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2