在将文件移动到其他位置之前,请替换文件名中的点和特殊字符

时间:2017-10-21 03:01:47

标签: windows batch-file

我需要通过创建新文件夹来移动文件。为此,下面是编写的代码。这工作得很好。

但是当文件名包含额外的点,空格和特殊字符(例如括号)时,代码会失败。

请先告诉我如何在将文件移动到目标位置之前更换/重命名点,空格和特殊字符。

if not exist "D:\KUMAR_398519667_9262017" mkdir D:\KUMAR_398519667_9262017
move D:\%2 D:\KUMAR_398519667_9262017

注意:%2是从触发程序传递到bat文件的文件名。

先谢谢。

2 个答案:

答案 0 :(得分:0)

只需在名称旁边加上引号:

move "D:\%~2" "D:\KUMAR_398519667_9262017"

答案 1 :(得分:0)

问题最有可能不在你的行动中#34;脚本,而是在调用"移动"的代码中。脚本。

每当您传递可能包含<space><tab>=;,等标记分隔符的字符串文字或&等特殊字符时{1}}等等,那么你应该将参数括在引号内。

假设您的脚本名为moveFile.bat,并且您要移动c:\some path with spaces\yourFile,那么您的通话应如下所示:

call moveFile arg1 "some path with spaces\yourFile"

然后您的脚本将正确执行

move D:\"some path with spaces\yourFile" D:\KUMAR_398519667_9262017

如果您忽略引用该论点,那么%2将被解析为c:\some,当然这将无效。

有些人认为你应该使用%~2删除任何现有的封闭引号,然后在整个路径中明确添加自己的引号,如

move "D:\%~2" D:\KUMAR_398519667_9262017

在这种情况下,执行的命令变得更熟悉

move "D:\some path with spaces\yourFile" D:\KUMAR_398519667_9262017

这当然也有效,但没有必要。

整体设计存在一个潜在的问题 - 它不能支持包含空格和插入符号(^)的路径,因为必须引用路径,但CALL语句将有效地加倍所有引用的插入符号。

所以call moveFile arg1 "some path with spaces\A^B.txt"会产生以下结果:

move D:\"some path with spaces\A^^B.txt" D:\KUMAR_398519667_9262017

你绝对没有办法阻止引用的插入符号加倍 当你使用CALL。最佳选择是通过引用将路径作为变量名称传递。显然这需要改变moveFile.bat:

以下是moveFile.bat所需的修改:

setlocal enableDelayedExpansion
if not exist "D:\KUMAR_398519667_9262017" mkdir D:\KUMAR_398519667_9262017
move "D:\!%2!" D:\KUMAR_398519667_9262017

调用moveFile的代码应如下所示:

set "myFile=some path with spaces\A^B"
call moveFile arg1 myFile
相关问题