标题: [文件操作] [已解决]求助批处理查找多个文件并设置变量路径 [打印本页]
作者: maghreb 时间: 2021-11-20 06:33 标题: [已解决]求助批处理查找多个文件并设置变量路径
- pushd %~dp0
- set pth=%~dp0
- for /l %%i in (1 1 3) do (for /f "delims=" %%a in (for %%i in (test1.dll test2.dll test3.dll) do ('dir /b /s /a-d "%pth%"^|find /i %%i')) do (set pth%%i=%%~dpa)
- echo %pth1%
- echo %pth2%
- echo %pth3%
- pause
复制代码
想在当前目录下查找子文件夹中的test1.dll、test2.dll、test3.dll并分别设置路径变量pth1、pth2、pth3,不知哪里出错,求大神帮忙,感谢感谢!
作者: qixiaobin0715 时间: 2021-11-20 07:40
不建议代码挤成一堆,别人看着费劲,自己有时也会发蒙:- @echo off
- setlocal enabledelayedexpansion
- set n=0
- for /r %%a in (test1.dll test2.dll test3.dll) do (
- set /a n+=1
- set path!n!=%%~dpa
- )
- pause
复制代码
作者: maghreb 时间: 2021-11-20 08:58
回复 2# qixiaobin0715
大神,经测试这样的话三个都只是批处理的当前目录
作者: maghreb 时间: 2021-11-20 09:01
需要在当前目录的子文件夹(多级)里查找到这三个文件,并获取这三个文件的绝对路径,再各自设置为变量
作者: qixiaobin0715 时间: 2021-11-20 09:39
- @echo off
- setlocal enabledelayedexpansion
- for /r %%a in (test1.dll test2.dll test3.dll) do (
- if exist "%%a" (
- if not "%%~dpa"=="%~dp0" (
- set str=%%~na
- set path!str:~-1!=%%~dpa
- )
- )
- )
- pause
复制代码
作者: maghreb 时间: 2021-11-20 09:56
回复 5# qixiaobin0715
大神,还是不行,555555。。。好难哦
作者: qixiaobin0715 时间: 2021-11-20 10:03
使用记事本打开bat文件,另存为ansi编码,再运行:- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir /s /b /a-d test1.dll test2.dll test3.dll') do (
- set str=%%~na
- set path!str:~-1!=%%~dpa
- )
- pause
复制代码
作者: maghreb 时间: 2021-11-20 10:21
还是不行哦
作者: cmd1152 时间: 2021-11-20 10:23
回复 8# maghreb
感觉你在嘲笑他...
作者: Batcher 时间: 2021-11-20 10:33
回复 8# maghreb
建议以后不要再说“不行”、“一闪而过”、“没有反应”之类的话,因为这对于想要给你进一步帮助的人来说没有任何意义。希望大家都能学会的一个知识点是:如何查看代码的报错信息。
请参考Q-01观察一下哪行代码在报错以及详细的报错信息:
https://mp.weixin.qq.com/s/6lbb97qUOs1sTyKJfN0ZEQ
作者: qixiaobin0715 时间: 2021-11-20 11:04
回复 8# maghreb
最好将测试文件夹打包发到网盘上,看看是否有人能帮你解决。
作者: maghreb 时间: 2021-11-20 11:37
回复 9# cmd1152
你想多了,他是我心中的大神,每遇问题都是他第一个帮我解决,而且他很热心,我不会嘲笑任何人
作者: maghreb 时间: 2021-11-20 11:37
回复 10# Batcher
好的,以后不会了
作者: maghreb 时间: 2021-11-20 11:38
回复 11# qixiaobin0715
非常感谢大神!!!
我是在任何位置新建几个文件夹和空文件名来测试的
作者: Batcher 时间: 2021-11-20 11:59
回复 14# maghreb
请把你的bat文件和目录结构打包上传到阿里云盘或百度网盘,我试试。
作者: maghreb 时间: 2021-11-20 12:16
回复 15# Batcher
在任何位置新建一个批处理,然后新建几个文件夹(含多级文件夹)和空文件名(比如test1.dll、test2.dll、test3.dll放不同文件夹位置)就可以测试
我之前是用for /f "delims=" %%a in ('dir /b /s /a-d "%pth%"^|find /i "test1.dll"') do (set pth1=%%a)来获取单个文件的路径并设置为变量,就想着用最简单的代码一次性设置N个文件的路径为不同变量
作者: maghreb 时间: 2021-11-20 12:29
回复 11# qixiaobin0715
--根目录
----test.bat
----1(PS:为一级子文件夹,内有三个文件夹2、3、4)
--------2 (PS:文件夹有文件test1.dll)
--------3 (PS:文件夹有文件test2.dll)
--------4 (PS:文件夹有文件test3.dll)
大神,按此结构测试即可,非常感谢
作者: Batcher 时间: 2021-11-20 12:33
回复 16# maghreb
代码本身看不出线索,所以才需要用你测试的原始bat文件和原始目录来进一步调查。
作者: maghreb 时间: 2021-11-20 13:22
回复 18# Batcher
没有原始代码啊,就是在当前位置遍历所有文件夹下查找N个文件,分别找到后对每个文件的位置设置一个变量,变量为pth1、pth2、pth3。。。这样
非常感谢帮忙!
作者: Batcher 时间: 2021-11-20 15:33
回复 19# maghreb
换个说法你看是否可以理解:
我的电脑上无法重现你的问题,所以请把你电脑上的bat文件和目录结构打包上传到阿里云盘或百度网盘,以便进一步调查这个问题。
作者: maghreb 时间: 2021-11-20 20:21
回复 20# Batcher
麻烦您测试,如果是test2.dll test3.dll就可以,如果改名如aaaaaaaa.dll就不行
https://cloud.189.cn/web/share?code=r2MjYfYFzyQn
作者: maghreb 时间: 2021-11-20 20:23
回复 11# qixiaobin0715
您写的代码挺好的,非常感谢您,有点小问题的是如果是test2.dll test3.dll就可以,如果改名如aaaaaaaa.dll就显示ECHO 处于关闭状态,期待完善
https://cloud.189.cn/web/share?code=r2MjYfYFzyQn
作者: flashercs 时间: 2021-11-21 05:48
- @echo off&setlocal enabledelayedexpansion
- cd /d "%~dp0"
- set n=0
- for %%a in (aaaaaaaa.dll test2.dll test3.dll) do (
- set /a n+=1
- for /f "delims=" %%i in ('dir /a-d /b /s %%a') do (
- set path!n!=%%~dpi
- )
- )
- echo %path1%
- echo %path2%
- echo %path3%
- pause
复制代码
作者: maghreb 时间: 2021-11-21 06:05
回复 23# flashercs
我刚刚测出来也是这样,正准备回复qixiaobin0715,结合qixiaobin0715大神的两段代码就可以了
作者: maghreb 时间: 2021-11-21 06:06
回复 5# qixiaobin0715
大神,结合您的两段代码测试成功,非常感谢您- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir /s /b /a-d aaaaaaaa.dll test1.dll test2.dll test3.dll') do (set /a n+=1 & set aaa=%%~dpa& set path!n!=!aaa:~,-1!)
- echo %path1%
- echo %path2%
- echo %path3%
- echo %path4%
- pause
复制代码
作者: maghreb 时间: 2021-11-21 06:07
回复 2# qixiaobin0715
再次感谢,困扰我几天的问题得到解决,论坛有你更精彩 :handshake :handshake :kiss: :kiss:
作者: qixiaobin0715 时间: 2021-11-21 09:16
回复 26# maghreb
问题要准确表达,不能以偏概全。如果开始就能把问题说清楚,可能就不会出现后来的波折。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |