在Windows批处理编程中读取文件名

我想在Windows批处理编程中读取文件的名称。 我正在尝试使用不同的方法,但失败请帮助。

情景已在下面给出。

我有一个文件夹中的不同文件,但文件名的长度是相同的所有文件。 例如

1000342578_30062011.PDF 1000342329_30062011.PDF 

而我只是想将30062011 (例如30062011 )之前的部分保存在一个variables中。

下面只是尝试,但我无法通过。

 @echo off echo.Date : %date% echo.Year : %date:~10,4% dir /s /b C:\Users\zeeshando\Desktop\*.txt for %%x in (c:\temp\*.xls) do echo %%x lfnfor off for %%x in (*.*) do echo %%x > filelist.txt PAUSE for %i in (C:\Users\zeeshando\Desktop) do echo %~ni PAUSE 

UPDATE

我现在的代码,基于@Alex K.的回答:

 @setlocal enabledelayedexpansion for %%x in (C:\Hi\*.*) do ( set fn=%%x set fn=!fn:~22,8! echo !fn! call:handler ) goto:eof :handler echo !fn! copy C:\Hi\*.* E:\!fn! goto:eof PAUSE 

但它不是复制文件。 请检查上面的代码。

Solutions Collecting From Web of "在Windows批处理编程中读取文件名"

你可以在for循环中使用_和来做这个。 作为分隔符,如下所示:

 FOR /F "tokens=2 delims=_." %%i IN ('DIR /b C:\Users\zeeshando\Desktop\*_*.*') DO ECHO %%i 
 @ECHO OFF SET "destpath= destinationPath " FOR %%f IN ( sourcePath \*.*) DO CALL :process "%%f" GOTO :EOF :process SET srcfile=%1 SET "name=%~n1" SET "name=%name:*_=%" COPY %srcfile% "%destpath%\%name%" 

SET "name=%~n1"行从完整路径中提取没有扩展名的名字。

SET "name=%name:*_=%"行删除name值中的_字符及其前面的所有内容,并将结果存回name

最终,在执行COPY命令之前, name只包含_和扩展名之间的原始文件名的那部分。

因为它们的长度是固定的,所以可以使用:~startpos,len语法;

 set fn=1000342578_30062011.PDF set fn=%fn:~11,8% echo %fn% >30062011 

在for循环中;

 setlocal enabledelayedexpansion for %%x in (*.*) do ( set fn=%%x set fn=!fn:~11,8! call:handler ) goto:eof :handler echo !fn! goto:eof