标题可能没有多大意义,但我正在尝试制作一个批处理文件,以帮助自动化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%
的行返回错误。
有人知道吗? 谢谢
答案 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"