对于BAT
文件,当我编写以下脚本时,我没有得到.jpg
文件夹中文件的名称。错误是什么以及如何实现?
for /f "tokens=*" %%f in ('dir /b *.jpg') do (
SET newname=%%f
SET front=%newname:~0,6%
echo %front%
)
对于BAT
文件,当我编写以下脚本时,我没有得到.jpg
文件夹中文件的名称。错误是什么以及如何实现?
for /f "tokens=*" %%f in ('dir /b *.jpg') do (
SET newname=%%f
SET front=%newname:~0,6%
echo %front%
)
当要执行括在括号中的复合语句时,该语句首先从左括号一直解析到匹配的右括号。
此时,any%var%
将替换为在它被解析时var
来自环境的值(即它的PARSE-TIME值。)
那么如果该语句看起来有效,它就会被执行。
访问变量的RUN-TIME值有三种常用方法(例如,在FOR
循环执行时)。
1/SETLOCAL ENABLEDELAYEDEXPANSION
切换到 !var! 可用于访问var
2/的运行时值,以从 3/ 的运行时值CALL set var2=%%var%%
设置 的值
执行子程序,内部或外部,其中
将是运行时值。var2
var
%var%
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FOR %%i IN (1 2 3) DO (
ECHO START of run %%i
ECHO using ^!time^! : !time! - PARSE TIME was %time%
CALL ECHO using CALL %%%%TIME%%%% : %%TIME%%
CALL :report
timeout /t 5
ECHO using ^!time^! : !time!
CALL ECHO using CALL %%%%TIME%%%% : %%TIME%%
CALL :report
ECHO END of run %%i
ECHO.
)
GOTO :eof
:report
ECHO :report says TIME is %TIME%
GOTO :eof
需要注意的几点:
该指令
IF ERRORLEVEL n 回显错误级别为 n 或更大
ALWAYS解释 RUN-TIME 值ERRORLEVEL
IF SET VAR
ALWAYS解释 RUN-TIME 值VAR
magic variables
永远不应该设置 ERRORLEVEL 和 TIME 。如果你执行
设置错误级别=哑
thenERRORLEVEL
将采用该值dumb
,因为环境中的当前值优先于系统分配的值。
这是一种选择 - 但是!文件名中的字符会导致问题。
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%f in ('dir /b *.jpg') do (
SET "newname=%%f"
SET "front=!newname:~0,6!"
echo !front!
)
pause