我想在windows批处理编程中读取文件的名称。我正在尝试使用不同的方法,但失败请求帮助。
下面给出了情景。
我在文件夹中有不同的文件,但文件名的长度对于所有文件都是相同的。 E.g。
1000342578_30062011.PDF
1000342329_30062011.PDF
我只是想在_
之后和.PDF
之前(例如30062011
)将部分保存在变量中。
以下只是尝试,但我无法通过。
@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
更新
我目前的代码,基于@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
但它不是复制文件。请检查上面的代码。
答案 0 :(得分:2)
您可以使用_和来在for循环中执行此操作。作为分隔符,像这样:
FOR /F "tokens=2 delims=_." %%i IN ('DIR /b C:\Users\zeeshando\Desktop\*_*.*') DO ECHO %%i
答案 1 :(得分:1)
@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
仅包含原始文件名中_
与扩展名之间的那部分。
答案 2 :(得分:0)
由于它们具有固定长度,因此您可以使用:~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