找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 28518|回复: 12

[文件操作] 批处理如何显示某个目录下的特定文件

[复制链接]
发表于 2020-5-16 19:56:46 | 显示全部楼层 |阅读模式
  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
复制代码
发表于 2020-5-16 20:19:27 | 显示全部楼层
  1. for %%i in (*.py) do (
  2.         echo %%~pnxi
  3.     )
复制代码
发表于 2020-5-16 21:45:56 | 显示全部楼层
回复 1# netdzb


    能否说明一下 echo %cd:~3%%%i 的结果跟你期望的结果差异是什么?
 楼主| 发表于 2020-5-16 23:11:44 | 显示全部楼层
本帖最后由 netdzb 于 2020-5-16 23:14 编辑

回复 3# Batcher


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

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

我希望得到avs\hello.py,当然斜杆我能加上去。
发表于 2020-5-16 23:51:19 | 显示全部楼层
回复 4# netdzb


    我测试你的代码无法重现此问题,能否把你的目录结构和bat文件打包压缩传上来我试试?
 楼主| 发表于 2020-5-17 04:44:30 | 显示全部楼层
本帖最后由 netdzb 于 2020-5-17 04:47 编辑

回复 5# Batcher

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

https://javame.lanzous.com/icplvhg
发表于 2020-5-17 08:03:43 | 显示全部楼层
或许这个是你想表达的,获取批处理所在目录名和目录内的指定类型文件名
  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
复制代码
发表于 2020-5-17 08:36:10 | 显示全部楼层
回复 6# netdzb


    可能不是command.com这个文件有问题,而是你对%cd%的理解有问题。改用别人提供的方案吧。
发表于 2020-5-17 08:39:05 | 显示全部楼层
回复 6# netdzb


    分别说下2楼、7楼代码的结果跟你的预期结果有哪些差异吧
 楼主| 发表于 2020-5-17 08:53:48 | 显示全部楼层
回复 9# Batcher

2楼的结果是
\avs\hello.py
我预期的是avs\hello.py
7楼的一会打开电脑再试。
 楼主| 发表于 2020-5-18 13:21:54 | 显示全部楼层
本帖最后由 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
发表于 2020-5-18 16:50:28 | 显示全部楼层
shell不熟,不好意思
发表于 2020-5-18 20:42:31 | 显示全部楼层
  1. @echo off
  2. for %%i in (*.py) do Set "P=%%~pnxi"
  3. echo %P:~1%
  4. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 19:25 , Processed in 0.021766 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表