BAT
文件,我没有得到文件夹中.jpg
个文件的名称。什么是错误以及如何实现?
for /f "tokens=*" %%f in ('dir /b *.jpg') do (
SET newname=%%f
SET front=%newname:~0,6%
echo %front%
)
答案 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
需要注意的几个项目:
指令
如果ERRORLEVEL n echo errorlevel是n OR GREATER
始终 解释ERRORLEVEL
IF SET VAR
始终 解释VAR
永远不应该像{ERRORLEVEL和TIME一样magic variables
设定。如果你执行
SET ERRORLEVEL = dumb
然后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