https://bugs.winehq.org/show_bug.cgi?id=48397
Bug ID: 48397 Summary: 'cmd.exe /c move file1 file2' doesn't overwrite existing destination file in non-interactive mode Product: Wine Version: 5.0-rc3 Hardware: x86-64 OS: Linux Status: NEW Severity: normal Priority: P2 Component: cmd Assignee: wine-bugs@winehq.org Reporter: focht@gmx.net Distribution: ---
Hello folks,
already mentioned in bug 48396 but split out here as separate issue.
--- snip --- $ echo "1" > test1 $ echo "2" > test2
# work around bug 48396 $ export COPYCMD=/Y
$ wine cmd /c move test1 test2 File already exists.
$ cat test2 2 --- snip ---
Wine source:
https://source.winehq.org/git/wine.git/blob/HEAD:/programs/cmd/builtins.c#l2...
--- snip --- 2959 void WCMD_move (void) 2960 { 2961 BOOL status; 2962 WIN32_FIND_DATAW fd; 2963 HANDLE hff; 2964 WCHAR input[MAX_PATH]; 2965 WCHAR output[MAX_PATH]; 2966 WCHAR drive[10]; 2967 WCHAR dir[MAX_PATH]; 2968 WCHAR fname[MAX_PATH]; 2969 WCHAR ext[MAX_PATH]; ... 3023 /* If destination exists, prompt unless /Y supplied */ 3024 if (GetFileAttributesW(dest) != INVALID_FILE_ATTRIBUTES) { 3025 BOOL force = FALSE; 3026 WCHAR copycmd[MAXSTRING]; 3027 DWORD len; 3028 3029 /* /-Y has the highest priority, then /Y and finally the COPYCMD env. variable */ 3030 if (wcsstr (quals, parmNoY)) 3031 force = FALSE; 3032 else if (wcsstr (quals, parmY)) 3033 force = TRUE; 3034 else { 3035 static const WCHAR copyCmdW[] = {'C','O','P','Y','C','M','D','\0'}; 3036 len = GetEnvironmentVariableW(copyCmdW, copycmd, ARRAY_SIZE(copycmd)); 3037 force = (len && len < ARRAY_SIZE(copycmd) && !lstrcmpiW(copycmd, parmY)); 3038 } 3039 3040 /* Prompt if overwriting */ 3041 if (!force) { 3042 WCHAR* question; 3043 3044 /* Ask for confirmation */ 3045 question = WCMD_format_string(WCMD_LoadMessage(WCMD_OVERWRITE), dest); 3046 ok = WCMD_ask_confirm(question, FALSE, NULL); 3047 LocalFree(question); 3048 3049 /* So delete the destination prior to the move */ 3050 if (ok) { 3051 if (!DeleteFileW(dest)) { 3052 WCMD_print_error (); 3053 errorlevel = 1; 3054 ok = FALSE; 3055 } 3056 } 3057 } 3058 } ... --- snip ---
$ wine --version wine-5.0-rc3
Regards