如何从名称中删除“设置”文件的文件扩展名,以便调用该文件?

时间:2019-09-30 11:01:05

标签: batch-file

标题可能没有多大意义,但我正在尝试制作一个批处理文件,以帮助自动化Java学习过程。在这种情况下,我试图创建一个程序,该程序可以自动找到存储Java项目文件的目录,找到最新文件,编译该文件,然后运行它。

到目前为止,我有这个:

@ECHO OFF
E:
cd \Documents\Java 
for /f %%i in ('dir /b/a-d/od/t:c') do set LAST=%%i
echo The most recently created file is %LAST%
javac %LAST%
java %LAST%
pause

暂停只是用于各种调试,因此我可以在窗口再次关闭之前了解它的意思。

目前您可以看到,%LAST%是最新文件,并且从运行程序开始,它就可以对其进行编译。但是,此后我的问题是,即使%LAST%本身已更改为“ .class”文件,我也无法找到一种方法来从新设置的{{1}中删除.class位},以便java命令可以运行它而不会沿“找不到类%LAST%的行返回错误。

有人知道吗? 谢谢

1 个答案:

答案 0 :(得分:1)

您可以打开cmd并键入for /f,然后查看变量扩展的工作方式。这是使用您的代码的演示:

@echo off
cd /d E:\Documents\Java 
for /f %%i in ('dir /b/a-d/od/t:c') do (
    echo %%i - Full filename:
    echo %%~ni - Name Only
    echo %%~xi - Extension Only
)
pause

您还可以看到不需要设置变量。因此应为:

@echo off
cd /d E:\Documents\Java 
for /f %%i in ('dir /b/a-d/od/t:c') do (
    echo The most recently created file is %%i
    javac %%i
    java %%~ni
)

但是如果您决定这样做,则只需在原始代码中更改此行:

for /f %%i in ('dir /b/a-d/od/t:c') do set "LAST=%%~ni"