批处理文件中的文件名提取
filename extract in batch file
我有一个要求,我的文件以 say 开头:- 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(这是不正确的)。我需要将整个文件名作为 public 键发送。所以,基本上我在没有条件的情况下使用一个下面的循环。因此,当涉及到第二个循环时,它会删除第一个字符。
因此,理想的解决方法是在 M* 和 UM* 相关文件中包含一个条件。我尝试使用 FINDSTR 但它不起作用或者我可能没有正确使用它 - 谁能告诉我如何使用 if-else 条件围绕循环到基于文件名的 运行 循环?
我不知道你在胡说什么
始终使用完整路径。特别是如果你想寻求帮助。
for %A in (c:\input\um*.* c:\input\m*.*) do echo %A
你删除 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!
我有一个要求,我的文件以 say 开头:- 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(这是不正确的)。我需要将整个文件名作为 public 键发送。所以,基本上我在没有条件的情况下使用一个下面的循环。因此,当涉及到第二个循环时,它会删除第一个字符。 因此,理想的解决方法是在 M* 和 UM* 相关文件中包含一个条件。我尝试使用 FINDSTR 但它不起作用或者我可能没有正确使用它 - 谁能告诉我如何使用 if-else 条件围绕循环到基于文件名的 运行 循环?
我不知道你在胡说什么
始终使用完整路径。特别是如果你想寻求帮助。
for %A in (c:\input\um*.* c:\input\m*.*) do echo %A
你删除 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!