0

对于BAT文件,当我编写以下脚本时,我没有得到.jpg文件夹中文件的名称。错误是什么以及如何实现?

for /f "tokens=*" %%f in ('dir /b *.jpg') do (

SET newname=%%f

SET front=%newname:~0,6%
echo %front%

)
4

2 回答 2

0

当要执行括在括号中的复合语句时,该语句首先从左括号一直解析到匹配的右括号。

此时,any%var%将替换为在它被解析时var来自环境的值(即它的PARSE-TIME值。)

那么如果该语句看起来有效,它就会被执行。

访问变量的RUN-TIME值有三种常用方法(例如,在FOR循环执行时)。

1/SETLOCAL ENABLEDELAYEDEXPANSION切换到 !var! 可用于访问var
2/的运行时值,以从 3/ 的运行时值CALL set var2=%%var%%设置 的值 执行子程序,内部或外部,其中 将是运行时值。var2var
%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

需要注意的几点:

  1. 该指令

    IF ERRORLEVEL n 回显错误级别为 n 或更大

    ALWAYS解释 RUN-TIME 值ERRORLEVEL

  2. IF SET VAR ALWAYS解释 RUN-TIME 值VAR

  3. magic variables永远不应该设置 ERRORLEVEL 和 TIME 。如果你执行

    设置错误级别=哑

thenERRORLEVEL将采用该值dumb,因为环境中的当前值优先于系统分配的值。

于 2013-06-01T08:59:54.657 回答
0

这是一种选择 - 但是!文件名中的字符会导致问题。

@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%f in ('dir /b *.jpg') do (
SET "newname=%%f"
SET "front=!newname:~0,6!"
echo !front!
)
pause
于 2013-06-01T10:07:14.430 回答