
Win7에서 마우스 오른쪽 버튼 클릭 메뉴를 통해 실행될 배치 파일을 만들었습니다. 폴더를 마우스 오른쪽 버튼으로 클릭하면 배치 파일을 통해 모든 파일(폴더 제외)을 1 디렉터리 위로 이동하고 싶습니다. 나는 지금까지 이것을 가지고 있습니다 :
PUSHHD %1
MOVE "%1\*.*" ..\
파일을 이동할 폴더에 공백이 없으면 이 방법이 작동하는 것 같습니다. 폴더에 공백이 있으면 오류 메시지가 나타납니다."명령 구문이 잘못되었습니다."
따라서 내 배치는 제목이 붙은 폴더에서는 작동 PULLTEST
하지만 제목이 붙은 폴더에서는 작동하지 않습니다 PULL TEST
.
다시 말하지만, 폴더를 이동할 필요는 없고 파일만 이동할 필요가 있습니다. 그리고 어떤 드라이브의 어떤 디렉토리에서도 작동하고 싶습니다. 제가 작업할 특정 디렉터리는 없습니다. 무작위로 지정됩니다.
아래는 참고가 필요하시면 제가 만든 레지스트리 파일입니다.
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\shell\PullFiles]
@="PullFilesUP"
[HKEY_CLASSES_ROOT\Directory\shell\PullFiles\command]
@="\"C:\\Program Files\\MyBatchs\\PullFiles.bat\" \"%1\""
답변1
배치는 다음과 같이 간단할 수 있습니다.
@move "%~1\*" "%~1\.."
물결표는 인수 값에 이미 있을 수 있는 둘러싸는 따옴표를 제거합니다. 추가 따옴표 세트가 문제의 원인이었습니다.
편집하다- 같은 이름의 파일이 상위 디렉터리에 이미 존재하는 경우 어떻게 되기를 원하는지 말하지 않습니다. MOVE 명령은 배치 파일에 있으므로 기본값은 상위 폴더의 파일을 자동으로 덮어쓰는 것입니다. 스크립트에서 지침을 묻는 메시지를 표시하여 덮어쓰기를 방지할 수 있는 기회를 제공하려면 이 /-Y
옵션이 필요합니다.
@move /-y "%~1\*" "%~1\.."
답변2
command 철자를 잘못 입력했습니다 . pushd
2개가 있습니다 .h
%1
그리고 명령 에서 제거해야 합니다 move
. 디렉토리에 공백이 있으면 move
명령이 중단됩니다.
배치 이름이 이라고 가정합니다 MoveFiles.bat
. 그것은 다음과 같이 호출됩니다 :
MoveFiles.bat "C:\Test\With Spaces"
배치 내에서 매개변수를 대체한 후에는 다음과 같이 표시됩니다.
PUSHD "C:\Test\With Spaces"
MOVE ""C:\Test\With Spaces"*.*" ..\
두 번째 명령에는 중첩된 따옴표로 인해 구문 오류가 있습니다.
이 버전의 배치는 나에게 적합합니다.
PUSHD %1
MOVE *.* ..\
답변3
해당 오류가 발생하는 이유는 공백 때문입니다. pushd
공백에서는 작동하지만 move
작동하지 않습니다. 두 번째 인수인 을 ..\
따옴표로 묶어보세요 .
PUSHD %1
MOVE "%1*.*" "..\"