如何读取cmd中多个文件的2个第一个字符

时间:2015-02-13 08:46:13

标签: batch-file

在工作中,我需要创建一个.bat脚本,读取第一行中的前两个字符,多个文件,然后将它们回显到屏幕。

到目前为止,我有这个:

@echo off  
setlocal enabledelayedexpansion  
for /r I:\Test\Filer %%F in (*.*) do (  
set first2 =<%%F  
set first2=%first2:~0,2%  
echo %first2%  
)

但所有写的都是:ECHO is off

任何人都知道我做错了什么?

3 个答案:

答案 0 :(得分:0)

@echo off
setlocal enabledelayedexpansion
for /r I:\Test\Filer %%F in (*.*) do (
set /p first2=<%%F
set "first2=!first2:~0,2!"
echo(!first2!
)

delayedexpansion模式下,%var%是分析时var的值,!var!是运行时值。

如果未设置((或“设置”为零长度字符串),则回显中的var将确保显示换行符

set语句中的引号确保尾随空格不包含在赋给变量的值中。

请注意,在字符串“set”语句中的variablename之后不允许使用空格;将设置名称中带有尾随空格的变量,这与名称中没有空格的变量不同。

set /p需要从文件中分配值。在开始时要注意零长度文件和包含换行符(CR LF)的文件!

答案 1 :(得分:0)

延迟扩展将导致变量在执行时而不是在解析时扩展,使用SETLOCAL命令打开此选项。当延迟扩展生效时,可以使用!variable_name!引用变量(除了正常%variable_name%

@echo off  
setlocal enableextensions enabledelayedexpansion  
for /r I:\Test\Filer %%F in (*.*) do (  
set /p first2=<"%%~F"  
set "first2=!first2:~0,2!"  
echo !first2!  
)

此处set /p first2=<"%%~F"使用双引号"%%~F"(如果路径或文件名包含例如空格的情况)和~修饰符(以避免双引号加倍)

资源:

答案 2 :(得分:0)

你缺少/ p!这应该有效:

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /r I:\Test\Filer %%F in (*.*) do (  
    SET /p first2=<%%F
    SET first2=!content:~0,2!
    ECHO !first2!
)
PAUSE