标题: [文件操作] 批处理如何把文件名改为文件夹名? [打印本页]
作者: swanseabrian 时间: 2021-8-16 17:13 标题: 批处理如何把文件名改为文件夹名?
文件夹的名字是这样的:FL6B-727-I-2600-001-R1.1-LOOP DIAGRAM-626-LT-1626
中间有个空格 ,
我用下面命令试着echo这个文件夹下的一个pdf文件,但是出不来,pdf的名字是001.pdf
请问这是怎么回事,谢谢
我用的命令是下面这个- for /f %%i in ('dir /b /s /a-d *.pdf') do (echo %%i)
复制代码
%%i加引号不加引号都出不来,
可是我在cmd命令下用dir /b /s /a-d 这个命令就可以输出,请问这是怎么回事呀,
谢谢
作者: qixiaobin0715 时间: 2021-8-16 17:40
- for /f "delims=" %%i in ('dir /b /s /a-d *.pdf') do (echo %%i)
复制代码
回复 1# swanseabrian
作者: swanseabrian 时间: 2021-8-16 18:11
回复 2# qixiaobin0715
我用上面代修改文件名空格后面的没加上去,
我用下面的代码- @echo on&setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /b /s /a-d *.pdf') do
- (set "fn=%%~dpi"
- for /f "delims=" %%j in ("!fn:~,-1!") do
- ren "%%i" "%%~nj-%%~xi")
复制代码
文件 夹名是这样的
FL6B-727-I-2600-004-R1.1-LOOP DIAGRAM-626-PT-1052
我想把文件 名也变成文件夹的名字,但是重命名后是这样的,FL6B-727-I-2600-004-R1,只有一半,这是怎么回事呢
作者: swanseabrian 时间: 2021-8-16 18:12 标题: 文件名改成文件夹名,文件夹名包含空格
我用上面代修改文件名空格后面的没加上去,
我用下面的代码- @echo on&setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /b /s /a-d *.pdf') do
- (set "fn=%%~dpi"
- for /f "delims=" %%j in ("!fn:~,-1!") do
- ren "%%i" "%%~nj-%%~xi")
复制代码
文件 夹名是这样的
FL6B-727-I-2600-004-R1.1-LOOP DIAGRAM-626-PT-1052
我想把文件 名也变成文件夹的名字,但是重命名后是这样的,FL6B-727-I-2600-004-R1,只有一半,这是怎么回事呢
作者: swanseabrian 时间: 2021-8-16 18:32
回复 2# qixiaobin0715
"delims=" 这个是以空格分割的意思吗,请问,
作者: qixiaobin0715 时间: 2021-8-16 18:39
回复 1# swanseabrian
以后请不要同一问题发2个帖子,这样会占用宝贵的资源:- @echo off
- for /f "delims=" %%i in ('dir /b /s /a-d *.pdf') do (
- for %%j in ("%%~dpi.") do ren "%%i" "%%~nxj%%~xi"
- )
- pause
复制代码
作者: qixiaobin0715 时间: 2021-8-16 18:43
回复 4# swanseabrian
说反了,不加delims才是默认空格分隔。
作者: swanseabrian 时间: 2021-8-16 19:01
回复 2# qixiaobin0715
我试了一下你这代码,没有运行起来,也不知道哪里的问题
作者: swanseabrian 时间: 2021-8-16 20:29
回复 2# qixiaobin0715
可以了,没问题,nj不要吗, nxj就没问题了,这是什么原理呀,谢谢
作者: swanseabrian 时间: 2021-8-16 20:42
回复 2# qixiaobin0715
"%%~dpi.,这后面加个点啥意思呀,请问
作者: qixiaobin0715 时间: 2021-8-16 21:55
回复 4# swanseabrian
1.循环变量替换增强:循环变量替换增强无论是变量代表文件名、文件夹名还是字符串,你都可把它看成文件名,如果只取%~nI时,就会把最后的点号前的部分当成文件名,而把点号及后面的部分当成文件扩展名看待。所以这里要取%~nxI,否则就会被分割为两部分。
2.至于"%%~dpi.,后面一个点表示文件所在文件夹,两个点表示父文件夹。
作者: swanseabrian 时间: 2021-8-16 22:05
- for /f "delims=" %%i in ('dir /b /s /a-d *.pdf') do (set "fn=%%~dpi"
- for /f "delims=" %%j in ("!fn:~,-1!") do ren "%%i" "%%~nj%%~xi")
复制代码
回复 6# qixiaobin0715
跟我这fn,-1的作用不一样吗?
作者: Batcher 时间: 2021-8-16 22:19
回复 4# swanseabrian
推荐阅读:批处理for命令教程
http://bbs.bathome.net/thread-31727-1-1.html
批处理for命令从入门到精通以及配套练习题
http://bbs.bathome.net/thread-2189-1-1.html
http://bbs.bathome.net/thread-2336-1-1.html
作者: qixiaobin0715 时间: 2021-8-17 06:40
回复 12# swanseabrian
当然可以。但是这样就要开变量延迟;嵌套for语句可直接用,不要带参数;%%~nj——%%~nxj。这样效率要高一些。
作者: swanseabrian 时间: 2021-8-17 09:35
回复 13# Batcher
好的,谢谢
作者: swanseabrian 时间: 2021-11-17 11:11
回复 14# qixiaobin0715
%%~dpi.
这个我打印出来,为什么只是路径加上点呢,而不是上级目录 ,
难道只有在循环中用一下吗?
C:\Users\Administrator\Desktop\bat\抗日战争\新建文件夹\
"C:\Users\Administrator\Desktop\bat\抗日战争\新建文件夹\.."
C:\Users\Administrator\Desktop\bat\抗日战争\新建文件夹\new_2.txt
C:\Users\Administrator\Desktop\bat\抗日战争\新建文件夹\
"C:\Users\Administrator\Desktop\bat\抗日战争\新建文件夹\.."
最后一个是我打印出来的结果 ,我加了两个点,就echo出两个点,这是啥情况
作者: qixiaobin0715 时间: 2021-11-17 11:20
是这样的。
作者: Batcher 时间: 2021-11-17 11:21
回复 16# swanseabrian
参考for命令教程第7页,有个 .. 获取上级文件夹的例子:
http://bbs.bathome.net/thread-31727-1-1.html
作者: swanseabrian 时间: 2021-11-17 11:24
回复 17# qixiaobin0715
可是我需要上级的路径 呀
作者: swanseabrian 时间: 2021-11-17 11:28
回复 18# Batcher
这个dpi不是就可以的吗
作者: qixiaobin0715 时间: 2021-11-17 11:36
你想要的结果是什么?
作者: qixiaobin0715 时间: 2021-11-17 11:45
回复 19# swanseabrian
请完整的说明你要达到的目的。
作者: swanseabrian 时间: 2021-11-17 13:20
回复 22# qixiaobin0715
我先用前面加个路径解决一下吧,
作者: swanseabrian 时间: 2021-11-17 18:31
回复 22# qixiaobin0715
为什么第一个不可以执行,第二个可以能执行,我感觉效果一样呢- 代码1
- @echo on
- echo 按任意键开始计算~
-
- pause>nul
-
- PATH=%PATH%;"C:\Program Files (x86)\GEO-SLOPE\GeoStudio 9\Bin"
- for /f "delims=" %%i in ('dir /b /s /ad ') do (
- findstr "%%~fi\SLOPE&3W Analysis" || echo "%%~fi\%%~nxi.xml"
- )
- echo 计算完成
- echo 按任意键退出
- pause>nul
-
- ------------------------------------------------
- 代码2
- @echo off
- echo 按任意键开始计算~
-
- pause>nul
-
- PATH="C:\Program Files (x86)\GEO-SLOPE\GeoStudio 9\Bin";%PATH%
-
- for /f "delims=" %%i in ('dir /b /s /ad ') do (
- if not exist "%%~fi\SLOPE&3W Analysis" (
- if exist "%%~fi\%%~nxi.xml" (
- echo "%%~fi\%%~nxi.xml"
- )
- )
- )
- echo 计算完成
- echo 按任意键退出
- pause>nul
复制代码
作者: qixiaobin0715 时间: 2021-11-17 19:00
findstr 是读取文本中特定行的命令,缺少指定文本文件。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |