윈 도 우 간단하게 배치파일을 만드려는데 조언 부탁드립니다.
2013.11.23 23:33
댓글 [8]
-
타마시 2013.11.23 23:49
-
도라란 2013.11.23 23:53
1번 해결!
감사합니다~
-
DarknessAngel 2013.11.23 23:59
키입력 기다리게 할려면 PAUSE
시간 정해서 기다리게 할려면 기다리게 할 초만큼 Ping을 날리세요 (1회당 1초 소비)
-
희망성사 2013.11.24 00:09
C:\Program Files (x86) ====> %ProgramFiles(x86)%
C:\Users\Administrator\AppData\Roaming ===> %AppData%\Roaming
-
도라란 2013.11.24 00:15
2번 해결!
두번째는 %AppData% 로 하면 뒤에 로밍까지 되네요.그래서 뒤에 로밍까지 치환하니 정상적으로 작동하네요.
감사합니다~
-
suk 2013.11.24 00:22
가만히 보면 xcopy만 선호하시고 robocopy는 아무도 안 쓰시네요? 저만 애용하는 듯
xcopy보다는 당연히 진화된 copy 명령이죠. 그냥 copy에서 xcopy로 진화했듯이 robocopy로 진화했는데
여전히 xcopy만 선호 하시네요 ;; 이것도 xcopy로 해결이 되는지는 모르지만...
일단 제가 잘 사용하는 robocopy로 한번 해보세요.xcopy보다는 강하죠
robocopy "%appdata%\foobar2000" "E:\백업\푸바백업\Roaming" /mir /zb /ndl /r:0
이건 동기화하는겁니다. 폴더 삭제하고 다시 만드실 필요없습니다. 이게 진화된 요소죠.
robocopy는 기본적으로 같은 파일은 건너뛰는 기능이 있습니다. 진화된 요소죠. 동기화 기능...기타등등..
-
도라란 2013.11.24 00:41
정상작동 하네요 감사합니다.
방금전 인터넷 검색해서
takeown /F "%AppData%\foobar2000" /R /D Y
icacls "%AppData%\foobar2000" /grant %username%:F /T
이 문장을 넣으니 정상작동하긴 하지만 robocopy는 저 문장이 없어도 되겠네요. ㅎㅎ
-
Quantum 2013.11.24 18:18
Vista나 Win8에 이르러 점점 보안이 강화되다보니 사용자 데이터나 설정 정보를 Program Files에 저장하지 않는 프로그램이 점점 많아지고 있습니다. 최고 관리자 계정이 아니면 파일 저장이나 수정이 안되죠. 보안상 UAC는 켜는 것이 좋습니다.
그래서 사용자 폴더(Users)에 데이터를 저장하는 일이 많아졌습니다.
그러한 경우, OS를 새로 설치하면 데이터가 삭제되기 때문에, 내문서나 즐겨찾기의 저장 경로처럼 사용자 데이터를 부팅 파티션이 아닌 디스크(드라이브, d:, e: 등)에 저장하는 사용자가 많죠.
여러 방법이 가능하겠습니다만, 폴더, 파일 동기화 프로그램을 사용할 수도 있겠고요. MS의 SyncToy라든가, Allway Sync 등 많습니다. 필요시마다 간단히 두 폴더의 파일을 비교해 병합하거나 어느 한 폴더를 기준으로 동기화시키거나 사용자 선택이 가능합니다.
상용 프로그램은 더 고급 기능이 제공됩니다. 사용자의 사전 설정에 따라 다수의 짝을 이루는 동기화 대상 폴더들을 등록하고 상시적으로 자동 동기화되도록 동기화 규칙을 사용자가 설정할 수 있습니다. 파일의 변경사항을 계속 추적하고 사용자 설정에 따라 동기화 처리를 하는 것이죠. 파일이 삭제되거나 수정되거나 신경쓸 일이 없습니다.
동일한 시스템 안에서든, 복수의 PC 간에든 동기화할 폴더나 파일이 많으면 저런 동기화 프로그램을 사용할 수도 있겠고요. 클라우드 동기화도 활용 가능하겠죠.
또 다른 방법은 심볼릭 링크나 졍크션이라는 Windows 내장 기능이 있습니다.
C: 드라이브에는 링크만 생성해놓고 실제 데이터는 링크로 연결된 다른 폴더에 저장하는 방식으로 활용할 수 있습니다.
Windows 자체에서도 많이 사용되고 있습니다. 아래 명령을 cmd 창에서 실행해보면 졍크션과 심볼릭 링크가 많이 쓰이고 있는 것을 볼 수 있습니다. 프로그램 설치 시, 로그온한 사용자가 아닌 '모든 사용자'에 프로그램 바로가기를 만들면 표면적으로는 C:\users\All Users에 바로가기를 만드는 것처럼 보이지만, 실제 데이터는 C:\ProgramData에 저장됩니다.
C:\>dir /a
C:\Users>dir /a
dir /a %userprofile%
아래는 foobar의 졍크션을 만들어본 것인데, 그대로 적용하기에는 약간 문제가 있으니 졍크션 생성 개념 파악에 참고만 하세요.
-------------------------------
@echo off
:: Check for permissions
>nul 2>&1 "%windir%\system32\cacls.exe" "%windir%\system32\config\system"&if errorlevel 1 (goto UACPrompt) else goto gotAdmin
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"&&echo UAC.ShellExecute "%~fs0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"&&"%temp%\getadmin.vbs"&&del "%temp%\getadmin.vbs"&&exit/b
:gotAdmin
pushd "%CD%"
CD /D "%~dp0"if defined ProgramW6432 (
SET SRC1="%ProgramFiles(x86)%\foobar2000"
) else (
SET SRC1="%ProgramFiles%\foobar2000"
)
SET SRC2="%AppData%\foobar2000"SET Target1="D:\Backup\foobar2000"
SET Target2="D:\Backup\foobar2000\AppData"if not exist %Target1% md %Target1%
if not exist %Target2% md %Target2%mklink /j %SRC1% %Target1%
mklink /j %SRC2% %Target2%:: 결과 확인
explorer /select,%Target1%
explorer /select,%Target2%
timeout /t 01>nul
explorer /select,%SRC2%
explorer /select,%SRC1%-----------------------------------
이런식으로 푸바에 대해서도 만들 수 있습니다.
그런데, 막상 푸바를 설치하고 제거해보니 이 놈이 새로 설치를 하면 기존의 AppData의 foobar 폴더를 삭제해 버리는군요. Uninstall 시에도 폴더 제거 옵션에 체크하면 또 지워버리고요.
뭐 중간에 스크립트를 좀 수정해서 써먹을 수도 있겠습니다만, 번거롭네요.
그냥 필요할 때마다, 폴더 동기화를 시키거나 복사하는 편이 낫겠습니다. 백업하는 배치파일을 작업 스케줄러에 등록해서 부팅시마다 또는 일정 시간마다 자동실행되도록 할 수도 있겠고요.
노트북과 데스크탑 PC를 수시로 동기화해야 한다거나 동기화가 빈번한 경우에는 동기화 프로그램을 설치하는게 편리하겠고요.
그렇지 않고 몇몇에 불과하다면, Total Commander의 폴더 비교 기능을 사용하는 것도 괜찮아 보입니다.
양쪽 패널에 각각 폴더를 선택하고 폴더 비교(Shift+F2)를 누르면 서로 다른 파일들이 각 창에서 빨간색으로 표시됩니다. 그럼 어느 한 쪽 창을 클릭해 포커스를 맞추고 복사 버튼을 누르면 반대창에 복사됩니다. 마찬가지로 반대 창에서도 해주면 되겠고요.
MS의 싱크토이는 무료인데 이것으로도 어지간한 동기화 작업은 가능합니다.
고급 기능을 원하면 유료 버전을 쓰는 것입니다. 폴더들을 수십 개 등록해놓고 쌍을 이루는 각 대상폴더 집합에 사전에 동기화 규칙을 정해주면 지가 알아서 변경내용을 추적하고 모든게 자동으로 처리됩니다.
배치파일도 좋은 방법입니다만, 공부 좀 하셔야겠고요.
위의 졍크션 생성 스크립트는 애플의 iTunes 보관함이나 백업 폴더를 C:가 아닌 드라이브에 보관한다거나 내비게이션의 지도 다운로드 폴더를 지정한다거나 할 때 폴더 경로만 수정해서 사용할 수 있겠습니다.
프로그램을 설치하기 전에 먼저 배치파일를 실행하여 링크를 만들어야 합니다. 그러면 기본 설치 경로인 C:안에 설치되는 것처럼 보이지만 실제 데이터는 링크가 걸린 다른 위치의 폴더에 저장되는 것이죠.
푸바의 경우에는 setup 프로그램이 좀 특이한 놈이라 중간에 설치과정을 넣어서 수정해야 합니다. 설치 마지막 단계가 되면 AppData의 폴더든 링크든 지워버리므로 setup 이후에 Appdata\foobar2000을 잘라내 옮기고 링크를 생성해야겠죠.
move "%appdata%\foobar2000" D:\backup\foobar
그런데 귀찮은 일입니다. 차라리 단순 복사로 백업하거나 동기화하는게 편할 것 같습니다.
다만, 이런 방법도 있으니 다음에 비슷한 작업할 때 써먹을 수 있게 개념은 알아두시라는 의미에서 졍크션 스크립트를 남깁니다.
배치파일은, 나 혼자만 쓰는 용도인가 타인도 함께 사용할 수 있게 작성할 것인가에 따라 라인수가 달라집니다.
내 환경만 고려하면 설치된 프로그램이나 폴더 경로를 이미 알고 있으니 스크립트가 간단할 수 있지만, 불특정 다수의 여러 OS 버전과 다양한 폴더 구조를 감안해 문제가 없도록 미리 추정해 작성하는 것에는 많은 차이가 있습니다.
위의 경우에도 32bit OS에서는 Program Files에 저장되겠지만, 64비트에서는 (x86) 폴더에 설치되어 설치경로가 다르죠. 그런 경우에 어떤 비트에 설치하더라도 문제가 없도록 비트를 알아내어 설치폴더를 변수설정한 예입니다. 멋 부리느라 일부러 저리한건 아닙니다.
사용자에게 실행 단계마다 정보를 제공하거나, 실행 도중 사용자 입력을 받거나, 가급적 사용자 개입없이 자동으로 처리하는가에 따라서도 라인수가 달라집니다만, 어떤 경우에도 오류 가능성은 배제해야 하겠지요. 그래서 다양한 환경과 사용자를 고려하자면 대개는 배치파일의 라인수가 증가합니다.
어느정도 공부목적이 있는가, 오로지 시간과 에너지를 아끼면 되는가에 따라 선택하면 된다고 봅니다.
어떤 작업마다 매번 스크립트를 공부하며 작성하고 할 필요는 없다는 것이죠. 이미 프로그램이 존재한다면 프로그램의 사용법을 익히는 편이 낫다는 것입니다.
굳이 이 말씀을 드리는 이유는, 배치파일에 필요 이상의 시간을 투자하지 않았으면 해서 드리는 말씀입니다. 간단한 정도만 익히시고 웬만하면 동일한 기능을 가진 프로그램이 있는지 찾아보고 그 사용법을 익히는 편이 자신의 소중한 시간을 아낄 수 있는 길이라는 것을 말씀드리고 싶습니다. 젊을 때 학생 때는 시간이 많은 것 같지만 결코 그렇지 않습니다. 프로그램이 널리고 널렸는데 굳이 스스로 복잡한 배치파일 작성하려고는 하지 마세요. 배치파일은 기초 정도만 떼면 족하다고 봅니다.
끝으로, mkdir로 쓰지 않아도 됩니다. md라고만 쓰시면 됩니다. (Make Directory)
짧은 명령어일 때, 의미파악이 잘 안되는 경우에는 일부터 긴 명령어를 사용하는 경우가 있지만 md의 경우에는 이니셜 그대로 어렵지 않으니 굳이 타이핑 수가 많은 명령어를 쓸 필요는 없다고 봅니다. 그럼 건승하세요.
고려적 기억력이라 맞을지 모르겠는데요~
pause 해둬도 입력 기다리지 않나요? ^^