Board logo

标题: [文件操作] 批处理如何显示某个目录下的特定文件 [打印本页]

作者: netdzb    时间: 2020-5-16 19:56     标题: 批处理如何显示某个目录下的特定文件

  1. @echo off
  2. for %%i in (*.py) do (
  3.         echo %cd%%%i
  4.     )
  5. pause
复制代码
// 上面是显示盘符的,如何去掉盘符???
// 我是用切割字符的方法,可惜结果运行不对啊。
// 还有别的方法吗?
  1. for %%i in (*.py) do (
  2.         echo %cd:~3%%%i
  3.     )
  4. pause
复制代码

作者: ivor    时间: 2020-5-16 20:19

  1. for %%i in (*.py) do (
  2.         echo %%~pnxi
  3.     )
复制代码

作者: Batcher    时间: 2020-5-16 21:45

回复 1# netdzb


    能否说明一下 echo %cd:~3%%%i 的结果跟你期望的结果差异是什么?
作者: netdzb    时间: 2020-5-16 23:11

本帖最后由 netdzb 于 2020-5-16 23:14 编辑

回复 3# Batcher


我输出的结果是,假设当前目录是avs

我输出的是avshello.py,好像我字符串分割没有完全学好。

我希望得到avs\hello.py,当然斜杆我能加上去。
作者: Batcher    时间: 2020-5-16 23:51

回复 4# netdzb


    我测试你的代码无法重现此问题,能否把你的目录结构和bat文件打包压缩传上来我试试?
作者: netdzb    时间: 2020-5-17 04:44

本帖最后由 netdzb 于 2020-5-17 04:47 编辑

回复 5# Batcher

里面一共4个版本代码,运行环境windows xp和win7的32位旗舰版本,
都出现了我描述的问题。
是不是command.com这个文件有问题?

https://javame.lanzous.com/icplvhg
作者: xp3000    时间: 2020-5-17 08:03

或许这个是你想表达的,获取批处理所在目录名和目录内的指定类型文件名
  1. @echo off
  2. for /f "delims=" %%a in ('dir /b/a-d/oN *.py') do (for %%b in ("%%a\..") do (
  3.         echo %%~nb\%%~nxa
  4.     )
  5. )
  6. pause
复制代码
这个多级
  1. @echo off
  2. for /f "tokens=1,* delims=\" %%a in ('dir /a-d /b /s *.py') do (for %%i in ("%%b\..") do (
  3.         echo %%~ni\%%~nxb
  4.     )
  5. )
  6. pause
复制代码

作者: Batcher    时间: 2020-5-17 08:36

回复 6# netdzb


    可能不是command.com这个文件有问题,而是你对%cd%的理解有问题。改用别人提供的方案吧。
作者: Batcher    时间: 2020-5-17 08:39

回复 6# netdzb


    分别说下2楼、7楼代码的结果跟你的预期结果有哪些差异吧
作者: netdzb    时间: 2020-5-17 08:53

回复 9# Batcher

2楼的结果是
\avs\hello.py
我预期的是avs\hello.py
7楼的一会打开电脑再试。
作者: netdzb    时间: 2020-5-18 13:21

本帖最后由 netdzb 于 2020-5-18 13:36 编辑

回复 2# ivor

如果用shell应该怎么写?假设需要遍历目录下面还有二级子目录,需要遍历文件夹下所有的*.py文件。


for file in `ls $1`  // 如果需要遍历所有的*.py是不是这里

for file in `ls $1` // 是不是这里加上grep方法就可以了?

我找到了这个脚本,但是是递归的方法。

#! /bin/bash
function read_dir(){
for file in `ls $1` #注意此处这是两个反引号,表示运行系统命令
do
if [ -d $1"/"$file ] #注意此处之间一定要加上空格,否则会报错
then
read_dir $1"/"$file
else
echo $1"/"$file #在此处处理文件即可
fi
done
}
#读取第一个参数
read_dir $1
作者: ivor    时间: 2020-5-18 16:50

shell不熟,不好意思
作者: smss    时间: 2020-5-18 20:42

  1. @echo off
  2. for %%i in (*.py) do Set "P=%%~pnxi"
  3. echo %P:~1%
  4. pause
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2