文件名提取在批处理文件中

时间:2015-02-22 15:31:35

标签: batch-file batch-processing

我有一个要求,我的文件以: - M8585858和UM966696开头。我已经编写了一个代码来使用for循环读取这些文件,如下所示: -

cd C:\Input\

echo M files ..........
for %%f in (M*.*) do (
   rem echo %%~nfAPSI
    set v=%%~nfAPSI
)
echo %v%

echo UM files ..........
for %%f in (UM*.*) do (
    set v=%%~nfAPSI
    )
set "v=%v:~1%"
echo %v%
cd D:\usr\src\IN\
cd
echo Directory changed
echo File in the input directory
timeout 5
echo Enumerating files before copy..
dir C:\In
java.exe -jar C:\abc.jar -rc4 -crypt C:\Input\ C:\Output\ %v%
Echo Enumerating files after copy.....
dir C:\Out
echo End Of Batch File Execution

但现在发生的情况是,只要将带有M966696的文件放入输入文件夹C:\ Input \,批处理文件就会删除第一个字符“M”并读取966696(这是不正确的)。我需要将整个文件名作为公钥发送。所以,基本上我在没有条件的情况下一个接一个地使用循环。因此,当涉及到第二个循环时,它会删除第一个字符。 因此,理想的解决方法是包含具有M *和UM *相关文件的条件。我尝试使用FINDSTR,但它没有工作或者我没有正确使用它 - 有人能告诉我如何使用循环周围的if-else条件来运行基于文件名的循环吗?

2 个答案:

答案 0 :(得分:0)

我不知道你在做什么。

始终使用完整路径。特别是如果你想寻求帮助。

for %A in (c:\input\um*.* c:\input\m*.*) do echo %A

答案 1 :(得分:0)

删除UM文件名的第一个字符的行位于错误的位置。您需要将其移动到处理UM文件的for循环中。由于您需要在for循环内设置和操作变量,因此您还需要启用延迟扩展。

setlocal enabledelayedexpansion
cd C:\Input\

echo M files ..........
for %%f in (M*.*) do (
    set v=%%~nfAPSI
)
echo !v!

echo UM files ..........
for %%f in (UM*.*) do (
    set v=%%~nfAPSI
    set "v=!v:~1!"
)
echo !v!