从txt文件中逐行提取并重新设置相同的变量

时间:2012-11-27 13:46:34

标签: for-loop batch-file

我有2个目录:dirA和dirB。我们现在只接受dirB。 dirB包含许多文件,当然命名为不同的名称/扩展名。

我需要从每个字母中提取前6个字母,之后我可以继续执行程序的第2部分,现在我只需要从每个文件中提取前6个字母并将它们写在txt文件上

这是我编写的代码,FOR是唯一一个效果不佳或更好的,而不是具有相同的变量:STR在loop1中命名为file1,在loop2中命名为file2等。

我有STR = file1file2fileN。 var是file1f(已经有6个字母)。

@ECHO off
CLS

SET dirA=C:\dirA
SET dirB=C:\dirB
SET lista=C:\lista.txt
IF NOT EXIST %dirB% GOTO DNF
IF NOT EXIST %dirA% GOTO DNF

setLocal EnableDelayedExpansion
CD %dirB%
DIR /B * > %lista%

:MAIN
CLS
SET /P S=Last Filename: || Set S=null

:LOOP 
IF /I "%S%"=="null" GOTO MAIN 
FOR /F "tokens=*" %%I IN (%lista%) DO SET str=!str!%%I
SET var=!str:~0,6!
echo !str! > str.txt
echo !var! >> file.txt
SET !str!%%I
IF /I %S%==!var! GOTO:EOF
IF /I %S% NEQ !var! GOTO SNF
GOTO LOOP

:DNF
ECHO.
ECHO %dirA% - %dirB% not found
GOTO:EOF

:SNF
ECHO.
ECHO %S%  Not found
TIMEOUT /T 2
GOTO MAIN

GOTO:EOF

endLocal
end

1 个答案:

答案 0 :(得分:0)

对不起。我想我不明白你的代码试图实现什么。但是,此批处理段“从每个文件中提取前6个字母并将其写入txt文件”:

(for %%I in (*.*) do (
   set str=%%I
   echo !str:~0,6!
)) > file.txt

将整个FOR命令括在括号中并使用单个>更有效。重定向操作,而不是使用>>为每个文件名附加操作。