我需要通过创建新文件夹来移动文件。为此,下面是编写的代码。这工作得很好。
但是当文件名包含额外的点,空格和特殊字符(例如括号)时,代码会失败。
请先告诉我如何在将文件移动到目标位置之前更换/重命名点,空格和特殊字符。
if not exist "D:\KUMAR_398519667_9262017" mkdir D:\KUMAR_398519667_9262017
move D:\%2 D:\KUMAR_398519667_9262017
注意:%2是从触发程序传递到bat文件的文件名。
先谢谢。
答案 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