Board logo

标题: [文本处理] 批处理如何更改扩展名并保留原文件 [打印本页]

作者: meiszp    时间: 2017-1-8 12:30     标题: 批处理如何更改扩展名并保留原文件

本帖最后由 meiszp 于 2017-1-8 12:33 编辑

在论坛搜索了下,都是直接更改文件扩展名,原文件也没了。
ren *.dat*.txt不能更改子文件夹下的。

求批处理可以更改当前文件夹及子文件夹下所有 dat文件为txt文件,并且保留原dat文件,将新txt文件放入当前目录下的new文件夹。
作者: pcl_test    时间: 2017-1-9 07:39

本帖最后由 pcl_test 于 2017-1-9 15:25 编辑

你以前的贴
http://www.bathome.net/viewthread.php?tid=41777
  1. powershell "$fd='new\';md $fd -force|out-null;ls . *.dat -r|%%{cp $_.FullName ($fd+$_.BaseName+'.txt')}"
  2. pause
复制代码

作者: Nsqs    时间: 2017-1-9 15:00

  1. @xcopy /syi  "目标目录\*.dat" "new\*.txt"
复制代码
这么简单其实百度一下就有了
作者: meiszp    时间: 2017-1-11 00:29

代码不能执行,对syi不明白, 还有就是目标了目录怎么默认成批处理所在的目录。
作者: Nsqs    时间: 2017-1-11 00:50

回复 4# meiszp

s是子目录 y是不显示任何确认提示i是如果目录不存在则创建 在运行输入cmd /k xcopy/?可以看到用法
作者: GNU    时间: 2017-1-11 20:23

回复 4# meiszp
  1. @echo off
  2. xcopy /s /y /i  "%~dp0*.dat" "new\*.txt"
复制代码

作者: meiszp    时间: 2017-1-11 23:28

回复 6# GNU

试验了下,好像不能实现。
作者: GNU    时间: 2017-1-11 23:37

回复 7# meiszp


    报错信息发出来看看
作者: meiszp    时间: 2017-1-11 23:40

  1. @echo off
  2. set /p c=是否保留源文件[y/n]:
  3. for /f "delims=" %%i in ('dir /b /s /a-d *.txt') do (
  4.     if /i "%c%" equ "y" (
  5.         copy "%%i" "%%~dpi%%~ni.dat" /y
  6.     ) else ren "%%i" "%%~ni.dat"
  7. )
  8. pause
复制代码
此代码可以实现更改扩展名,但更改后的文件是在各个子目录里,和原文件同目录,如何实现把更改后的文件放入当前目录下新建的new文件夹。
作者: meiszp    时间: 2017-1-11 23:42

回复 8# GNU

没有报错信息,一闪而过。
作者: GNU    时间: 2017-1-11 23:52

回复 10# meiszp


    不要双击执行,打开一个CMD窗口,手工执行可以看到报错信息。
作者: meiszp    时间: 7 天前 21:30

回复 11# GNU
提示,不能执行循环复制。
作者: meiszp    时间: 7 天前 21:34

本帖最后由 meiszp 于 2017-1-12 22:12 编辑

回复 2# pcl_test

你好!谢谢之前的代码 ,但更改后的文件和原文件同目录,现在子目录很多,需要一个一个目录找出文件,如何实现把更改后的所有文件放入当前目录下新建的new文件夹,不包含子目录。谢谢!
作者: GNU    时间: 7 天前 21:34

回复 12# meiszp


把 new 这个文件夹放到当前文件夹的上级目录:
  1. @echo off
  2. md ..\new
  3. xcopy /s /y /i  "%~dp0*.dat" "..\*.txt"
复制代码

作者: meiszp    时间: 7 天前 22:08

本帖最后由 meiszp 于 2017-1-12 22:37 编辑

现在可以执行了,但有两个问题:
1. 它在上级目录生成了一个new文件夹,里面是空的,其他文件提取到了上一级目录,保持了原来的目录树,
2. 删除第2行代码也可以,效果一样。

我想把更改后的所有文件放入new文件夹,并且不要子目录,只有文件。

更改成下面的,文件放入了上级new文件夹,还是保持了原理的目录结构。
  1. @echo off
  2. xcopy /s /y /i  "%~dp0*.dat" "..\new\*.txt"
复制代码

作者: GNU    时间: 6 天前 17:56

本帖最后由 GNU 于 2017-1-18 13:02 编辑

回复 15# meiszp
  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /s /a-d *.dat') do (
  3.     copy /y "%%i" "..\new\%%~ni.txt"
  4. )
复制代码

作者: meiszp    时间: 6 天前 23:39

回复 16# GNU

谢谢!还是一闪而过,在cmd里提示此时不应有%%i
作者: GNU    时间: 5 天前 01:11

回复 17# meiszp


16楼的代码把 @echo off 删掉,保存为 test.bat
打开 CMD 窗口执行 test.bat
这样能明白吗?
作者: meiszp    时间: 前天 20:50

回复 18# GNU

你好!提示 系统找不到dir
作者: meiszp    时间: 前天 21:05

本帖最后由 meiszp 于 2017-1-17 21:06 编辑
你以前的贴
pcl_test 发表于 2017-1-9 07:39
  1. @echo off
  2. set /p c=是否保留源文件[y/n]:
  3. for /f "delims=" %%i in ('dir /b /s /a-d *.txt') do (
  4.     if /i "%c%" equ "y" (
  5.         copy "%%i" "%%~dpi%%~ni.dat" /y
  6.     ) else ren "%%i" "%%~ni.dat"
  7. )
  8. pause
复制代码
此代码可以实现更改扩展名,但更改后的文件是在各个子目录里,和原文件同目录,如何实现把更改后的文件(不包含目录)放入当前目录下新建的new文件夹。麻烦看看,真的很需要。
作者: GNU    时间: 昨天 13:03

回复 19# meiszp


    16楼代码已更新,请重新测试。




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