如何在cmd中读取多个文件的前2个字符

How to read the 2 first chars of multiple files in cmd

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

到目前为止我有这个:

@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

有人知道我做错了什么吗?

@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 语句中的引号确保尾随 space 不包含在分配给变量的值中。

注意字符串"set"语句中变量名后面不允许有space;名称中带有尾随 space 的变量将被设置,这与名称中没有 space 的变量不同。

set /p 需要从文件中赋值。小心零长度文件和开头包含换行符 (CR LF) 的文件!

Delayed Expansion会导致变量在执行时而不是在解析时被扩展,这个选项用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"(对于路径或文件名包含例如 space 的情况)和 ~ 修饰符(以避免重复双引号)

资源:

你错过了/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