JSI Tip 1018. MOVE does not work if target file exists.

The MOVE command moves one or more files from one directory to the target directory. The syntax is:

move <source> <target>


<source> specifies the path and name of the file(s) to move.

<target> specifies the path and name to move file(s) to.

After a MOVE statement, the <source> file(s) no longer exists and the <target> file(s) have the same permissions (ACL) as they did in the <source> folder.

When using the MOVE command, you will receive

Cannot create a file when that file already exists.

if any <target> file already exists.

I have scripted MV.BAT to circumvent this problem. The syntax is:

mv <source> <target>

Wildcards (*) are supported. Examples:

mv <Drive:>\SourceFolder\*.log <Drive:>\TargetFolder\*.log
mv <Drive:>\SourceFolder\*.log <Drive:>\TargetFolder\*.txt
mv <Drive:>\SourceFolder\*.log <Drive:>\TargetFolder\*.*
mv <Drive:>\SourceFolder\file*.log <Drive:>\TargetFolder\*.log

MV.bat contains:

@echo off
if %2

"" goto syntax set p1=%1 set p2=%2 set p2=%p2:"=% set p2="%p2%" set fp1=%~DP1 set fp2=%~DP2 set f2=%~N2 set x2=%~X2 if "%f2%"

"" set f2=* if "%x2%"

"." set x2=.* set px="%fp2%%f2%%x2%" if /i %p2%

%px% goto same set px="%fp2%%f2%.*" if /i %p2%

%px% set x2=.*&goto same set f2=* :same pushd %fp1% for /f "Tokens=*" %%i in ('dir /b %p1%') do call :movit "%%i" popd endlocal goto end :syntax @echo Syntax - MV <source> <target> endlocal goto end :movit set p2=%fp2%%f2%%x2% if "%f2%"

"*" goto move2 if "%x2%"

".*" set p2=%fp2%%f2%%~X1 :move1 if exist "%p2%" del /q /f "%p2%" move %1 "%p2%" goto end :move2 set p2=%fp2%%~N1%x2% if "%x2%"

".*" set p2=%fp2%%~N1%~X1 goto move1 :end

Hide comments


  • Allowed HTML tags: <em> <strong> <blockquote> <br> <p>

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.