我想在当前文件夹中存储.jpg文件的变量(via loop)名称

时间:2013-06-01 08:52:57

标签: batch-file dos

当我编写以下脚本时,对于BAT文件,

我没有得到文件夹中.jpg个文件的名称。什么是错误以及如何实现?

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

SET newname=%%f

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

)

2 个答案:

答案 0 :(得分:0)

当要执行括在括号中的复合语句时, 该语句首先从所有的开括号中解析出来 匹配近括号的方法。

目前,任何%var%都会被var的{​​{1}}替换 环境在它被分配的时间(即其 PARSE-TIME 值。)

THEN 如果语句似乎有效,则执行。

有三种常用方法可以访问 RUN-TIME 值 变量(例如,作为FOR循环执行。)

1 / SETLOCAL ENABLEDELAYEDEXPANSION切换到其中的模式 !VAR!可用于访问var的运行时值 2 / CALL set var2=%%var%%设置var2的值 运行时值var
3 /执行%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. 指令

    如果ERRORLEVEL n echo errorlevel是n OR GREATER

    始终 解释ERRORLEVEL

  2. 的RUN-TIME值
  3. IF SET VAR 始终 解释VAR

  4. 的RUN-TIME值
  5. 永远不应该像{ERRORLEVEL和TIME一样magic variables 设定。如果你执行

    SET ERRORLEVEL = dumb

  6. 然后ERRORLEVEL将采用值dumb,因为当前 环境中的值优先于系统分配的值。

答案 1 :(得分: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