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

[文件操作] [分享]批处理往上取3层的目录

[复制链接]
发表于 2023-8-21 17:48:19 | 显示全部楼层 |阅读模式
【问题描述】
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set p=C:\Users\farben\AppData\Roaming\DBeaverData\workspace6\General\Scripts
  4. for /l %%b in (1,1,3) do (
  5.     for %%c in (!p!) do (
  6.         set p=%%~dpc
  7.         set p=!p:~0,-1!
  8.         echo,!p!
  9.     )
  10. )
  11. pause
复制代码
写了个递归取上级目录
不知道 有没有更好的方法
你们一般遇到这种往上取3层的目录怎么实现呢?
 楼主| 发表于 2023-8-21 17:48:53 | 显示全部楼层
【解决方案】
  1. @echo off
  2. set "p=C:\Users\farben\AppData\Roaming\DBeaverData\workspace6\General\Scripts"
  3. for %%i in ("%p%\..\..\..") do (
  4.     echo,%%~fi
  5. )
  6. pause
复制代码
发表于 2023-8-21 20:46:07 | 显示全部楼层
我之前用PowerShell写了一个,调用PowerShell一层for就能出来了,帖子在哪里不记得了
发表于 2023-8-21 21:39:56 | 显示全部楼层
本帖最后由 Nsqs 于 2023-8-21 21:47 编辑
  1. @echo off
  2. powershell -noprofile -executionpolicy bypass "&{param([string]$Path='.',[int]$Return=0);$CurrentPath=[System.IO.DirectoryInfo]::new($Path).FullName;if($Return -eq 0){return $CurrentPath};$Count=[regex]::Matches($CurrentPath,'\\').Count;if($Count -lt $Return){throw '无法返回更多层了!'};$Layer=$Count-$Return;if($Layer -eq 0){$Layer=1};$CurrentPath.Substring(0,$CurrentPath.IndexOf('\',$Layer+1))}" -return 2
  3. pause
复制代码
参数-path可以指定路径 -return指定返回的层数,上面写2表示返回2层

评分

参与人数 1技术 +1 收起 理由
buyiyang + 1 有所启迪,可以这样传参

查看全部评分

发表于 2023-8-21 21:55:26 | 显示全部楼层
  1. (dir ..\.. -Directory).Parent.FullName
复制代码
虽说这样也行,但是不能按数字来准确指定向上一级返回多少层
发表于 2023-8-21 22:21:07 | 显示全部楼层
p版的思路
  1. @echo off
  2. call:redir 2
  3. pause

  4. goto :eof
  5. :redir
  6. set "s=.."
  7. set /a return=%1
  8. for /l %%1 in (1,1,%return%)do (
  9.         call set "s=%%s%%.."
  10. )
  11. for %%1 in (%s%)do echo %%~f1
  12. goto :eof
复制代码
发表于 2023-8-22 00:55:14 | 显示全部楼层
额,这让我想起第一次看见"D:\aaa\bbb.txt\..\ccc.txt" 这样的路径,脑袋卡壳,想半天才发现的两个点(..)所说的的“上一级目录”不仅仅是“当前目录”的“上一级目录” 的事情
发表于 2023-8-22 09:18:53 | 显示全部楼层
做个标记,留存学习。楼主辛苦了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 13:19 , Processed in 0.019457 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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