第一步,新建一个名为 ls.py 的 Python 文件,输入如下内容,并保存到 C:\Windows 目录中:
import sys
import os
def ls(*args):
# 如果有传路径参数,则取路径参数,没传则取当前目录("." 表示当前目录)
path = args[1] if args.__len__() > 1 else "."
# 文件不存在,直接退出
if not os.path.exists(path):
return
# 文件不是一个目录,直接退出
if not os.path.isdir(path):
return
files = os.listdir(path)
# 对文件名进行排序,方便阅读一些
files.sort()
print(" ".join(files))
if __name__ == "__main__":
ls(*sys.argv)
第二步,新建一个名为 ls.bat 的批处理文件,输入如下内容,也保存到 C:\Windows 目录中:
@echo off
rem %* 表示把批处理收到的所有参数都传递给 ls.py
python C:\Windows\ls.py %*
最后我们来看看效果:
java版:
---------------------------------------------------------------------------------------------------------------------------
我们也可以用其它语言来实现这个类似的脚本,比如 java,操作步骤如下:
第一步,新建一个名为 ListFiles.java 的 java 源文件,键入如下内容:
import java.io.File;
import java.util.Arrays;
import java.util.Comparator;
public class ListFiles {
public static void main(String[] args) {
String path = args.length != 0? args[0] : ".";
File file = new File(path);
if (!file.exists() || !file.isDirectory()) {
return;
}
File[] files = file.listFiles();
if (null == files || files.length == 0) {
return;
}
Arrays.sort(files, new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
return o1.getName().toLowerCase().compareTo(o2.getName().toLowerCase());
}
});
String gap = " ";
String names = "";
for (File f : files) {
names += f.getName() + gap;
}
System.out.println(names);
}
}
第二步,将它丢到 C:\Windows 目录下,然后在命令行把它编译成 .class 文件:
C:\Windows>javac ListFiles.java
编译成功后,在 C:\Windows 目录下将看到一个名为 ListFiles.class 的文件
第三步,编写 ls.bat,并把它也移动到 C:\Windows 目录:
@echo off
java -cp C:\Windows ListFiles %*
执行以下看看效果:
可以看到,跟 python 版一样的。一般情况我们推荐用 python,不用编译,修改更便捷。
一个小窍门:java 其实也是可以不编译直接运行的,我们只要在启动 java 时使用 --source <N> 参数就可以了。例如,本例中我们可以把它修改为:
java --source 14 C:\Windows\ListFiles.java
--source 后面的 14 表示用 jdk 14去编译和执行源文件。其它可用值有:7、8、9、10、11、12、13、14。
需要注意的是, --source 命令虽然可以不用编译就直接执行 .java 文件,但它并不是像其它解释型语言那样直接解释执行,其实它是把 .java 加载到内存中后在内存里先执行了编译,然后再交给虚拟机的解释器去运行的。正是因此,所以我们在 --source 参数去直接执行 .java 文件时会明显的感觉比编译后去执行 .class 文件要慢
注意:以上示例需要先安装 Python 或 JDK 哈