在工作中,我需要创建一个.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
任何人都知道我做错了什么?
答案 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