When copying/moving, appending " (2)" to filename when the target file already exist.

Oct 20, 2017
27
0
Netherlands
Question: When a filename in the target folder already exists, is there a simple solution, like appending "(2)" to the filename, before copying/moving the file to the target directory?
 

samintz

Scott Mintz
May 20, 2008
1,409
13
Solon, OH, USA
There is no easy solution. You could turn on clobber mode and COPY will prompt you before overwriting an existing file.
Otherwise you'll have to write a custom COPY script that checks for an existing file and formats a new name based on the existing name.
This isn't checked, but should be close. You'll probably need to do something with quotes too if there are any spaces.
CustomCopy.btm:
Code:
set dest=%2
iff ISFILE %dest then
  do i = 1 to 65535
    if ISFILE %@PATH[%2]%@NAME[%2](%i).%EXT[%2] ITERATE
    set dest=%@PATH[%2]%@NAME[%2](%i).%EXT[%2]
    LEAVE
  enddo
endiff
copy %1 %dest
 

samintz

Scott Mintz
May 20, 2008
1,409
13
Solon, OH, USA
A full blown COPY command would need to check for a destination directory, include lists, regular expressions, wild cards, etc. So an ideal solution would have to be done internally.
 
Apr 18, 2014
237
8
Question: When a filename in the target folder already exists, is there a simple solution, like appending "(2)" to the filename, before copying/moving the file to the target directory?
Take a look at the @VERSION function in TCC help, I think it will do what you want. For example, if two directories DIR1 and DIR2 both contain a file called TESTFILE.TXT:

Code:
d:\>dir /b dir1
testfile.txt

d:\>dir /b dir2
testfile.txt
Then the following command will successfully copy TESTFILE.TXT from DIR1 to DIR2, appending a version number to the end of the filename:

Code:
d:\>copy \dir1\testfile.txt %@version[\dir2\testfile.txt,_]
D:\dir1\testfile.txt => D:\dir2\testfile.txt_1

     1 file copied

d:\>dir /b dir2
testfile.txt
testfile.txt_1
 
Aug 23, 2010
562
7
"Extension" is merely a convention. You never know if last dot in a file name actually designates an "extension".