Board logo

标题: 关于去掉文件扩展名的问题? [打印本页]

作者: zzhh612     时间: 2007-4-8 06:18    标题: 关于去掉文件扩展名的问题?

批处理中有这一句:copy %1 %~n1
这可以把文件的扩展名去掉吗,我试了一下好象不行,那么怎样才能在批处理中用命令参数的方式去掉文件的扩展名呢?
作者: slore     时间: 2007-4-8 06:47
ren %1 "%~n1"
作者: zzhh612     时间: 2007-4-8 07:32
ren %1 %~n1
for %%f in (%1) do (copy 1.txt + %%f + 3.txt   %%f.htm)

我本想是在%1所代表的文本文件前后各加上一段文字,再将合并后的文件更名为.thm
可是每次生成的文件都成了*.txt.htm ,不知在调用%1的过程中如何把.txt去掉,
当把for中的%1替换为%~1或是把最后的%%f 修改为%~nf,都不能正常执行.

也就是说如何让for 调用的是去掉扩展名后的文件.当然如果分成两步先去扩展名再调用批处理合并文件,这容易完成,可我想在一个批处理中完成?

[ Last edited by zzhh612 on 2007-4-8 at 07:41 AM ]
作者: kcdsw     时间: 2007-4-8 07:53

set sname=%~n1
echo %sname%  & echo %1
pause >nul

ren %1 %~n1
for %%f in (%1) do (copy 1.txt + %%f + 3.txt   %%f.htm)
先看看效果
作者: zzhh612     时间: 2007-4-8 08:30
试验了一下楼上的代码,结果照旧,原文本文件的扩展名去掉了,但生成的文件为*.txt.htm
作者: bjsh     时间: 2007-4-8 10:35
比如你把18.txt 去掉扩展名可以

ren 18.txt *.

再比如你c盘里有很多tiff文件你想去掉他们的扩展名

ren *.tiff *.

即可把所有的tiff文件去掉扩展名
作者: bjsh     时间: 2007-4-8 10:48


  Quote:
Originally posted by zzhh612 at 2007-4-7 06:32 PM:
ren %1 %~n1
for %%f in (%1) do (copy 1.txt + %%f + 3.txt   %%f.htm)

你这样写的代码

生成不止一个文件吧;

恐怕你的这个%1文件内容有多少就能生成多少个htm文件吧;

先暂且不讨论是否有.txt.htm

恐怕不是你想要的结果吧;

补充:是我自己理解错了;
把for 和for /f 没分清
for /f %%f in (%1) do (copy 1.txt + %%f + 3.txt   %%f.htm)

生成不止一份文件;源代码确实是生成一份文件的

[ Last edited by bjsh on 2007-4-8 at 01:21 PM ]
作者: zzhh612     时间: 2007-4-8 13:38
当然是在命令行下或是在另一个批处理中调用用这个批处理.一次调用,%1只代表一个文件,例如:c:\ test.bat  test.txt      或是在另一个批处理中调用:
              call test.bat  test.txt
一次调用中%1只代表test.txt文件,所以也只生成一个test.txt.htm文件,只是我现在想要它生成的是test.htm文件.
作者: lxmxn     时间: 2007-4-8 14:41

copy /y %1 "%~dpn1"

作者: bjsh     时间: 2007-4-8 21:07
这个可以的

  Quote:

  1. @echo off
  2. ren %1 %~n1
  3. for %%f in (%~n1) do (copy 1.txt + %%f + 3.txt   %%f.htm)
         BJSH发表于:  2007-04-08  07:57


作者: zzhh612     时间: 2007-4-9 00:31
bjsh
的代码,是我自己在用的过程中写错了一点.本身是能正常运行的,原来此贴作废.特此向BJSH致歉!

[ Last edited by zzhh612 on 2007-4-9 at 01:51 AM ]
作者: zzhh612     时间: 2007-4-9 00:58
按lxmxn的意见建立的test.bat:
@echo off
copy /y %1 "%~dpn1"
for %%f in (%~dpn1) do (copy 1.txt + %%f + 3.txt   %%f.htm)
del %~dpn1

这个代码在命令行调用和通过另一个批处理调用均能得到要求的结果,真是不错.
作者: zzhh612     时间: 2007-4-9 01:20
不过我在试用楼上的代码过程式中发现了一个奇怪的现象,
就是当我无意中将test.txt拖向test.bat是,在这种运行方式下,却生成了如下的test.html的文件:

<!-- 文字加标记符b 红色加粗,加标记符i 蓝色斜体 -->
<!-- 文字加标记符b 红色加粗,加标记符i 蓝色斜体 -->
<!-- 文字加标记符b 红色加粗,加标记符i 蓝色斜体 -->
<!-- 文字加标记符b 红色加粗,加标记符i 蓝色斜体 -->
<!-- 文字加标记符b 红色加粗,加标记符i 蓝色斜体 -->
<!-- 文字加标记符b 红色加粗,加标记符i 蓝色斜体 -->
<!-- 文字加标记符b 红色加粗,加标记符i 蓝色斜体 -->
<!-- 文字加标记符b 红色加粗,加标记符i 蓝色斜体 -->
<!-- 文字加标记符b 红色加粗,加标记符i 蓝色斜体 -->
<!-- 文字加标记符b 红色加粗,加标记符i 蓝色斜体 -->
<!-- 文字加标记符b 红色加粗,加标记符i 蓝色斜体 -->
<!-- 文字加标记符b 红色加粗,加标记符i 蓝色斜体 -->
<!-- 文字加标记符b 红色加粗,加标记符i 蓝色斜体 -->
<!-- 文字加标记符b 红色加粗,加标记符i 蓝色斜体 -->
<!-- 文字加标记符b 红色加粗,加标记符i 蓝色斜体 -->
<!-- 文字加标记符b 红色加粗,加标记符i 蓝色斜体 -->
<!-- 文字加标记符b 红色加粗,加标记符i 蓝色斜体 -->
<!-- 文字加标记符b 红色加粗,加标记符i 蓝色斜体 -->
<!-- 文字加标记符b 红色加粗,加标记符i 蓝色斜体 -->
<HTML><HEAD><TITLE>电脑网络技术日记</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312"><LINK href="/css/style2.css" type=text/css rel=stylesheet>
<!-- 文字加标记符b 红色加粗,加标记符i 蓝色斜体 -->
</HEAD>
<BODY background="./img/bg03.gif"><pre>
<!-- 插入内容开始 -->
<HTML><HEAD><TITLE>电脑网络技术日记</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312"><LINK href="/css/style2.css" type=text/css rel=stylesheet>
<!-- 文字加标记符b 红色加粗,加标记符i 蓝色斜体 -->
</HEAD>
<BODY background="./img/bg03.gif"><pre>
<!-- 插入内容开始 -->
<HTML><HEAD><TITLE>电脑网络技术日记</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312"><LINK href="/css/style2.css" type=text/css rel=stylesheet>
<!-- 文字加标记符b 红色加粗,加标记符i 蓝色斜体 -->
</HEAD>
<BODY background="./img/bg03.gif"><pre>
<!-- 插入内容开始 -->
<HTML><HEAD><TITLE>电脑网络技术日记</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312"><LINK href="/css/style2.css" type=text/css rel=stylesheet>
<!-- 文字加标记符b 红色加粗,加标记符i 蓝色斜体 -->
</HEAD>
<BODY background="./img/bg03.gif"><pre>
<!-- 插入内容开始 -->
888888888888888888888888888888888888
99999999999正文999999999999999999
111111111111111111111111111111111111
<!-- 插入内容结束 -->
</pre></BODY></HTML>
<!-- 插入内容结束 -->
</pre></BODY></HTML>
<!-- 插入内容结束 -->
</pre></BODY></HTML>
<!-- 插入内容结束 -->
</pre></BODY></HTML>

---------------------------------------------------------------------------------------------------
而本身我这时的1.txt内容是"文本前插入",3.txt的内容是:"最后插入文本",除test.txt正文的内容正确外,怎么其它全变了,好象它所合并在test.txt两端的内容是我昨天试用这个批处理所用的内容:1.txt是{<HTML><HEAD><TITLE>电脑网络技术日记</TITLE> <META http-equiv=Content-Type content="text/html; charset=gb2312"><LINK href="/css/style2.css" type=text/css rel=stylesheet>
<!-- 文字加标记符b 红色加粗,加标记符i 蓝色斜体 -->
</HEAD>
<BODY background="./img/bg03.gif"><pre>
<!-- 插入内容开始 --> }

3.txt的内容是:{<!-- 插入内容结束 -->
</pre></BODY></HTML> }

可我昨天的这两个文件已经删除了,怎么还会有呢.即使就是附加的昨天的内容,也不对呀,因为它们分别被重复附加了多次.实在不明白了.
难道用这种拖放的方式执行bat.是调用的什么没有被清空的历史变量吗.它与命令行调用或是批处理调用有什么区别呢.而命令行调用或是批处理调用却又能正常执行????
有请高人来解答了...


[ Last edited by zzhh612 on 2007-4-21 at 09:14 AM ]